问题:开发有时会用到多个标志位,那么通常如何实现呢?
方式1:普通方式,即使用bool数组
方式2:二进制位方式,参考mfc等可看到一种通过使用二进制的每一位来代替bool数组的方式,比较实用
实现方式:
#define MY_FLAG (1<<0) //二进制--00000001,16进制--0x00000001
#define MY_FLAG2 (1<<1) //二进制--00000010,16进制--0x00000002
#define MY_FLAG3 (1<<2) //二进制--00000100,16进制--0x00000004
#define MY_FLAG4 (1<<3) //二进制--00001000,16进制--0x00000008
#define MY_FLAG5 (1<<4) //二进制--00010000,16进制--0x00000010
...
(使用计算器输入二进制可方便看到16进制)
(1)判断标志位是否为true
方法:使用"&"操作符
//判断MY_FLAG是否为真
int nFlag = 0x43;
if(nFlag & MY_FLAG ){
...
}
else{
....
}
原理:1与任何数相与是它本身,0与任何数相与都为0
(2)将对应的标志位设置为true
方法:使用“|”操作符
//将MY_FLAG标志设置为真
int nFlag = 0x000000;
nFlag = nFlag | MY_FLAG;
原理:0与任何数相或是它本身,1与任何数相或都为真
(3)将对应的标志位设置为false
方法:使用"&"和"~"操作符
//将MY_FLAG标志设置为假
int nFlag = 0x000001;
nFlag = nFlag & (~MY_FLAG);
原理:取反后其他位都是1,自己位是0,1与任何数相与是它本身,0与任何数相与都为0
本文介绍了一种使用二进制位替代布尔数组管理多个标志位的方法,详细讲解了如何通过位运算符进行标志位的设置、清除及判断,提供了一种高效的空间利用方案。
3792

被折叠的 条评论
为什么被折叠?



