位域[flags]
来源:互联网 发布:宁夏工业大数据 神软 编辑:程序博客网 时间:2024/06/05 20:28
转自:http://www.cnblogs.com/c2303191/articles/1103475.html
[flags]
enmu chl{a=1,b=2,c=3}用flags声明了一个位域,与枚举不同,位域支持不同的&和|操作。
对于普通枚举,|和&操作代表二进制比特操作
enmu ch{a=1,b=2,c=3}
ch.a|ch.c=01|11=3
ch.a&ch.b=01&10=0
对于位域,|和&操作代表逻辑操作
[flags]
enmu chl{a=1,b=2,c=3}
---------|操作把两边位域的元素组合起来(忽略相同部分,并且根据元素的值的和自动转换)
chl.a|chl.b=chl.3 因为1+2=3 这就是位域根据元素和自动转换的例子,但有时这也会给我们带来不便,因为如果chl.c本意不代表chl.a和chl.b的组合,所以我们在设计位域元素值的时候遵循这个原则:从1开始(因为0代表&的无相同元素结果)后一个数是前一个数的2倍,这样就能保证不出现我们本意之外的自动转换
enum chl{a=1,b=2,c=4,d=8}。如果某个元素e希望是其他所有元素的组合(a|b|c|d),我们可以把这个元素的值设为所有元素的和
enum chl{a=1,b=2,c=4,d=8,e=15} (一个位域最好只有一个组合值,那就是all元素)
chl.c|chl.c=chl.c 这是位域忽略相同部分的例子
----------&操作取得两边位域共有的元素,如果没有相同值,返回值0,如果有相同元素,返回相同元素
chl.b|chl.c&chl.b|chl.a=chl.b
chl.b|chl.c&chl.a|chl.d=0
用if(yy&xxx==yy)判断是否存在yy元素
用if(yy&xxx==0)判断是否不存在yy元素
设计位域是遵循条件
1,带[flags]特性
2,元素值从1开始,后面的元素是前面元素值的2倍,最后一个元素设定为all,值为前面元素值的和
3,使用时用|操作组合元素项
4,判断时用 if(位域常量组合A==位域常量组合A&位域变量B)判断位域变量B中是否完全包含位域常量组合A
5, 赋值时用 位域变量=位域变量A&位域变量B
0 0
- C# 位域[flags]
- 位域【flags】
- 位域[flags]
- C# 位域[flags]
- 汇编标志位 - FLAGS
- 按位枚举(flags)的使用
- python正则表达式flags标志位
- flags ()
- Flags
- Flags
- Unity学习之路——C# 位操作、Flags、接口、抽象类
- FLAGS = tf.app.flags.FLAGS
- Flags Enum
- 对话框flags
- enum flags
- Intent flags
- global flags
- Codility-Flags
- Virtual servers on a Raspberry Pi with the light weight OS virtualization system Docker!
- 安卓自学笔记(一)Android开发环境的配置
- 二叉树打印--子树不相交
- node.js开发之bootstrap日期控件(bootstrap-datetimepicker)的使用
- 一个简单的显示bmp图像宽高的c程序
- 位域[flags]
- ICA学习乐园
- 数据结构的学习笔记
- Matlab中pwelch的用法总结
- Linux时间编程
- C++第11周(春)项目2 - 职员有薪水了
- 在SEO网站优化过程中大家最容易犯的哪些错误
- 排序算法 两路合并排序
- sdut 2624 Contest Print Server (第四届省赛)