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

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

libravilla 回答:标志枚举以0x作为前缀的枚举值是什么拼写?

好吧,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,}
,

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

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

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

  

整数文字可以是

     
      
  • 十进制:没有任何前缀
  •   
  • 十六进制:前缀为0x或0X
  •   
  • binary:带有0b或0B前缀(在C#7.0和更高版本中可用)
  •   
本文链接:https://www.f2er.com/3152910.html

大家都在问