好玩的位操作开关群

来源:互联网 发布:科来网络 编辑:程序博客网 时间:2024/06/08 09:03

作为开发者, 经常应付开发中涉及到的变量, 就好像脚心上长痘痘一样, 挠也不是, 不挠也不是. 每个控制变量单独设置是没有什么, 但是设置多了就烦了, 一不好控制, 二不好管理的

使用位开关的好处是, 便于管理, 也处理速度快, 优于数值和布尔处理速度
下面介绍位操作的使用方法

创建:

利用枚举创建多个相关或者不相关的开关类型, 通过枚举集中管理, 可以一目了然, 增加的时候改变最后一位值, 最多设置32个开关, 同时完全关闭和完全开启可以单独作为一个类型

enum 位类型{    完全关闭 = 0,    位类型1 = 1<<0,    位类型2 = 1<<1,    完全开启 = -1,}uint32_t 位变量开关

设置位开关

覆盖指定开关

位变量开关 = 位类型1

打开某开关

位变量开关 |= 位类型1

关闭某开关

位变量开关 &= ~位类型1

动态设置开关, 这样设置灵活度比较高, 但是不好管理, 不推荐

位变量开关 = 是否开1<<0 | 是否开2<<1 | 是否开<<3

不过可以改进一下

enum 类型{    类型1,    类型2,}uint32_t 位变量开关 = 是否开1<<0 | 是否开2<<1 | 是否开<<3

判断开关开启

判断开关包含类型

位变量开关 & 位类型1

判断开关不包含类型

!(位变量开关 & 位类型1)

题外话

因为box2d就是用这种开关来限制和检测碰撞, 而开脑洞去想, 如果box2d支持64位, 那么开关也可以开到64个, 不过现有的32组开关加上indexGroup已经足够满足现状了

0 0
原创粉丝点击