首页 新闻 会员 周边 捐助

枚举定义为1,2,4,8.......的值,这样当传入一个3,那么就是表示1,2的组合,如果传入7,那就表示1,2,4的组合

0
悬赏园豆:5 [待解决问题]

枚举定义为1,2,4,8.......的值,这样当传入一个3,那么就是表示1,2的组合,如果传入7,那就表示1,2,4的组合,如何用算法实现

不要问我从哪里来123的主页 不要问我从哪里来123 | 初学一级 | 园豆:6
提问于:2017-03-31 18:20
< >
分享
所有回答(3)
0

List<int> Get(int status)

{

var statusFlags=new List<int>();

for(int i=0;i<(你的枚举项数量);i++)

{

  int mask = 1 << i;
     if ((status & mask) == mask)
     statusFlags.add(mask);

}

  return statusFlags;

}

Daniel Cai | 园豆:10424 (专家六级) | 2017-03-31 19:18
0

不用实现..net里直接用标识枚举就行.在枚举定义上加[flag]

或者百度搜:.net 标识枚举

吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-31 19:32

用的JAVA

0

用位运算

这些枚举值的二进制是

1  0x0001

2  0x0010

4  0x0100

8  0x1000

 

所以1和2的组合就是  1|2=3  0x0011

2和4的组合就是    2|4=6  0x0110

 

想判断组合值中是否包含某个值,就让这个组合值和期望的值做与操作,得到的结果如果和期望值相同就表示包含:

如判断0x001 中是否有1,就是 3|1=1  0x0001.

 

总体的思路就是这样,多个枚举值时一样可行。

行乎当行 | 园豆:347 (菜鸟二级) | 2017-03-31 20:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册