【发布时间】:2016-11-24 05:59:52
【问题描述】:
有什么区别
[Flags]
public enum AnswerFlags
{
A = (1 << 2),
B = (1 << 1),
C = (1 << 0)
}
和
public enum AnswerFlags
{
A = 4,
B = 2,
C = 1
}
为什么我应该使用位而不是整数?
【问题讨论】:
-
位在使用硬件端口和寄存器时通常很有用。在某些情况下,当极其紧凑的表示比清晰的代码更重要时,它们也很有用。
-
这个问题为你解答:stackoverflow.com/questions/8447/…
-
这不是链接到的问题的副本。这是关于将值定义为移位表达式或文字的方式。
-
另一种方式会更常见(从 1 开始,每个下一个值加倍)。至于差异,结果值将相同,但 1、2、3 等的级数看起来更自然,左移表达式更明确地表达位掩码。很明显,对于每个值,只有一位被设置,并且对于每个下一个值,该位都会向左移动一步。做错也更难,因为每次加 1 比加倍增长的十进制数更容易。我以前从未见过这种声明标志的方式,但我喜欢它,我会采用它。