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
请按任意键继续. . .
留言评论
暂无留言