标记以 0x 作为前缀的枚举值的拼写是什么?

What spelling is that flags enum values having 0x as prefix?

我发现此 enum 具有 Flags 属性:

    [Flags]
    public enum Technology
    {
       None = 0x0000,
        X1 = 0x0001,
        X2 = 0x0002,
        X3 = 0x0004,
        X4 = 0x0008,
        X5 = 0x0010,
        X6 = 0x0020,       
    }

分配给 enum 成员的值,它是什么拼写?

那会一样吗?

    [Flags]
    public enum Technology
    {
       None = 0,
        X1 = 1,
        X2 = 2,
        X3 = 4,
        X4 = 8,
        X5 = 10,
        X6 = 20,       
    }

如果是,为什么 X5 不是 16 两倍于 X4 的值,因为该逻辑发生在 X1X4!

0x0000 在十六进制中为 0。这意味着 0x0010 实际上是十进制的 16 - 使两个枚举的 x5x6 成员不同。

为了使它们相同,在第二个 enum 中,您需要 1632 用于 x5x6

0x 前缀告诉 c# 编译器该值是十六进制的 - 如 Integer Literals paragraph in Integral numeric types (C# reference):

中所述

Integer literals can be

  • decimal: without any prefix
  • hexadecimal: with the 0x or 0X prefix
  • binary: with the 0b or 0B prefix (available in C# 7.0 and later)

嗯,0x前缀意味着十六进制,而不仅仅是十进制。所以等效的声明将是

十六进制0x前缀)

[Flags]
public enum Technology
{
   None = 0x0000,
     X1 = 0x0001,
     X2 = 0x0002,
     X3 = 0x0004,
     X4 = 0x0008,
     X5 = 0x0010, // 0x0010 == 1 * 16 + 0 == 16
     X6 = 0x0020, // 0x0020 == 2 * 16 + 0 == 32       
}

十进制

[Flags]
public enum Technology
{
   None =  0,
     X1 =  1,
     X2 =  2,
     X3 =  4,
     X4 =  8,
     X5 = 16,
     X6 = 32,       
}

二进制(注意0b前缀)

[Flags]
public enum Technology
{
   None = 0b000000,
     X1 = 0b000001,
     X2 = 0b000010,
     X3 = 0b000100,
     X4 = 0b001000,
     X5 = 0b010000,
     X6 = 0b100000,       
}