C++ primer实例 <<位运算符

C++ primer实例 <<位运算符

位运算符在实际项目开发也很有实用性。游戏开发中,可以在商城物品购买状态,活动领取状态,怪物死亡状态等等功能中使用到。

关键词:左移运算符<<   取反运算符~  或运算符 |  三目运算符  ?:

当前实例为C++ primer中的一个实例的实现。
假设班级中有30个学生。老师每周都会对学生进行一次小测试,测试的结果只有通过何不通过
两种。为了更好的追踪检测的结果,我们一个二进制位代表某个学生在一次测验中是否通过。


#include<iostream>
#include <bitset>
using namespace std;
typedef long long int64_t;
/************************************************************************/
/*	c++ primer实例
	假设班级中有30个学生。老师每周都会对学生进行一次小测试,测试的结果只有通过何不通过
	两种。为了更好的追踪检测的结果,我们一个二进制位代表某个学生在一次测验中是否通过。
	
*/
/************************************************************************/

bool SetOpenFun(int64_t &baseDate, const int bit){
	int64_t nValue = 1<<bit;
	cout<<"SetOpenFun : "<<bitset<sizeof(nValue)*8>(nValue)<<endl;
	baseDate |= nValue;
	cout<<"baseDate: "<<bitset<sizeof(baseDate)*8>(baseDate)<<endl;
	return true;
}

bool SetCloseFun(int64_t &baseDate, const int bit){
	int64_t nValue = 1<<bit;
	baseDate &= ~nValue;
	cout<<"SetOpenFun ~: "<<bitset<sizeof(~nValue)*8>(~nValue)<<endl;
	cout<<"baseDate: "<<bitset<sizeof(baseDate)*8>(baseDate)<<endl;
	return true;
}


bool GetSatusFun(const int64_t &baseDate, const int bit){
	int64_t nValue = 1<<bit;
	cout<<"GetSatusFun : "<<bitset<sizeof(nValue)*8>(nValue)<<endl;
	int64_t nNowValue = baseDate & nValue;
	cout<<"nNowValue: "<<bitset<sizeof(nNowValue)*8>(nNowValue)<<endl;
	if (nNowValue)
	{
		return true;
	}
	return false;
}

int main(){
	//基础成绩状态
	int64_t baseDate = 0;
	//设置27号学生成绩过关
	SetOpenFun(baseDate, 27);
	cout<<endl;
	bool bPass = GetSatusFun(baseDate, 27);
	cout<<"is pass : "<<((bPass == true)?"true":"false")<<endl;
	cout<<endl;
	SetCloseFun(baseDate, 27);
	cout<<endl;
	bPass = GetSatusFun(baseDate, 27);
	cout<<"is pass : "<<((bPass == true)?"true":"false")<<endl;
	system("pause");
	return 0;
}


输出结果:

SetOpenFun : 0000000000000000000000000000000000001000000000000000000000000000
baseDate: 0000000000000000000000000000000000001000000000000000000000000000

GetSatusFun : 0000000000000000000000000000000000001000000000000000000000000000
nNowValue: 0000000000000000000000000000000000001000000000000000000000000000
is pass : true

SetOpenFun ~: 1111111111111111111111111111111111110111111111111111111111111111
baseDate: 0000000000000000000000000000000000000000000000000000000000000000

GetSatusFun : 0000000000000000000000000000000000001000000000000000000000000000
nNowValue: 0000000000000000000000000000000000000000000000000000000000000000
is pass : false
请按任意键继续. . .