查找Bitwise操作结果的最有效方法

时间:2015-03-08 10:28:08

标签: c# bit-manipulation bitwise-and

我在另一种语言中获得了一些代码,它使用枚举和枚举值列表,然后使用按位来获取枚举值列表的整数。

HELLO = 1
WORLD = 2
AND = 4
SO = 8
ON = 16

所以,如果我在列表中有HELLO和SO,我会得到一个值

1 | 1000 = 1001

1001bin to dec = 9

我试图找出获取此整数的最有效方法,并返回包含的枚举列表。

2 个答案:

答案 0 :(得分:2)

假设您想直接使用枚举,所有枚举的基本类型都是整数。有了这些知识,你就可以采用整数的“无界”性质,并带来枚举的优点。

enum Greetings {
  HELLO = 1,
  WORLD = 2,
  AND = 4,
  SO = 8,
  ON = 16
}

所以,如果你从被调用者那里得到一个整数(做互操作?),你就可以这样做:

Greetings greet = (Greetings)theIntegerResult;

从那时起,您可以执行按位操作以查看设置了哪些字段。

bool isHelloSet = (greet & Greetings.HELLO) == Greetings.HELLO;
bool isWorldSet = (greet & Greetings.WORLD) == Greetings.WORLD;
bool isAndSet = (greet & Greetings.AND) == Greetings.AND;
bool isSoSet = (greet & Greetings.SO) == Greetings.SO;
bool isOnSet = (greet & Greetings.ON) == Greetings.ON;

答案 1 :(得分:1)

在C#中使用Enum.HasFlag(v)。如果枚举的值设置为v,它将返回。

请参阅documentation on MSDN