【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

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin--你不知道的事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值