按位C#运算符

按位C#运算符,c#,operators,bit-manipulation,C#,Operators,Bit Manipulation,我查阅了一些游戏编程代码,并看到了如下所示的枚举: [Flags] public enum CollisionCategories { Cat1 = (1 << 0), Cat2 = (1 << 1), Cat3 = (1 << 2), Cat4 = (1 << 3), ... } [标志] 公共枚举冲突类别 { Cat1=(1您对存储的值的看法是正确的。这不会对性能产生影响,因此在代码上下文中,可读性问题

我查阅了一些游戏编程代码,并看到了如下所示的枚举:

[Flags]
public enum CollisionCategories
{
    Cat1 = (1 << 0),
    Cat2 = (1 << 1),
    Cat3 = (1 << 2),
    Cat4 = (1 << 3),
    ...
}
[标志]
公共枚举冲突类别
{

Cat1=(1您对存储的值的看法是正确的。这不会对性能产生影响,因此在代码上下文中,可读性问题可能更有意义。

是的,它是相同的

我个人会用1,2,4,8…因为我认为这些数字是众所周知的,没有人会误解发生了什么


性能是一样的。代码大小是一样的。

是的,它是一样的。这只是为了让代码更可读。

当你得到更大的数字时,它更容易


我确信(1我认为String.Empty相当于“”,编译器将识别文本并将其转换……无论如何,对于枚举来说也是一样的,这只是一个样式问题,对于枚举来说,我认为这些是位标志,这是100%显式的


或者可能编码员对自己的2的幂没有信心,也懒得去计算它们。

对于一些人来说,这样设置它们比典型的C原始十六进制/十进制数初始化更干净。(0x1、0x4000等)由于编译器识别一个文本并将其转换为普通数字,因此没有性能缺陷,这只是一个样式问题。

性能在这里不是问题。枚举被编译为一个常量,因此是编译器在执行此任务,因此运行时性能没有差异

另一种方法可能是使用电源,但因为这涉及到代码,所以它不起作用:

enum MyEnum{
  Val1 = Math.Pow(1,2) // throws compile error
}
错误1正在指定的表达式 到 '控制台应用程序1.Program.MyEnum.Val1' 必须是 常量C:\Users\Aliostad\Documents\Visual 演播室 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 130 11 ConsoleApplication1


枚举值必须是常量。

s=string.Empty
更具表现力,这就是人们使用它的原因,这与性能无关这是完全一样的…
(1我希望[flags]自动给你1,2,4,8等…代替0,1,2,3等…而不必手动输入。你可以做梦。听起来不错。感谢大家的回复。也许2的前几次幂是众所周知的,但这些数字很快就变大了。如果你有超过5个标志,那么位移位表示肯定更可读。耶当然。我只对小数字使用,我记住18位的值。通常,这是我定义枚举时所需要的全部。