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

问题描述 投票:-2回答:2

我发现此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

c# enums flags
2个回答
3
投票

Well,0x前缀表示十六进制,而不仅仅是decimal。因此,等效声明将是

十六进制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,       
}

binary(请注意0b前缀)

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

1
投票

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

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

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

整数文字可以是

  • 十进制:没有任何前缀
  • 十六进制:带有0x或0X前缀
  • 二进制:带有0b或0B前缀(在C#7.0和更高版本中可用)
© www.soinside.com 2019 - 2024. All rights reserved.