c#开发园地

c#开发园地

管理
[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

注:位域常量组合A类似 chl.c|chl.b
                       
posted on 2008-03-13 12:08  chl  阅读(2134)  评论(0编辑  收藏  举报