【c++实例总结】 位运算代替bool数组

问题:开发有时会用到多个标志位,那么通常如何实现呢?

方式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

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(c-c++)