标签:就是 开始 判断 目的 运算 flags 实现 自身 原因
[Flags]
enum AnyThings{
A=1,
B=2,
C=4,
D=8
}
枚举赋值必须是2^n才可以,目的是实现他们的二进制表示中的 1 ,不要重叠,如 1=0001 2=0010 4=0100,所以他们或运算: 1|2|4=0111
在取值的时候,直接用 enm&AnyThings.A==AnyThings.A 就可以判断是不是包含这个值,因为: 0111 & 0010 = 0010 ,但是如果你的枚举中,存在一个 3 或者6之类的,他们的二进制表示是 0011和0110,那么他们再和 1|2|4进行 与 计算的时候,也会返回自身,所以就不对了(因为1|2|4并不包含3和6),这就是为啥一开始要把他们设置为2^n的原因。
如果想删除其中一项怎么办? 直接enm ^ AnyThings.A ,就可以把AnyThings.A取消了,如 1|2|4=0111, 0111^0010 = 0101=1|4,把 2 删除了
标签:就是 开始 判断 目的 运算 flags 实现 自身 原因
原文地址:http://www.cnblogs.com/wangdy/p/8007491.html