码迷,mamicode.com
首页 > 编程语言 > 详细

Enum_Flags

时间:2017-12-09 00:49:39      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:就是   开始   判断   目的   运算   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 删除了

Enum_Flags

标签:就是   开始   判断   目的   运算   flags   实现   自身   原因   

原文地址:http://www.cnblogs.com/wangdy/p/8007491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!