枚举值为0x0001?

时间:2009-07-23 18:05:29

标签: c# enums

我有这样的枚举声明:

public enum Filter
{
  a = 0x0001;
  b = 0x0002;
}

这是什么意思?他们正在使用它来过滤数组。

9 个答案:

答案 0 :(得分:10)

这意味着它们是分配给这些名称的整数值。枚举基本上只是命名数字。您可以在枚举的基础类型和枚举值之间进行转换。

例如:

public enum Colour
{
    Red = 1,
    Blue = 2,
    Green = 3
}

Colour green = (Colour) 3;
int three = (int) Colour.Green;

默认情况下,枚举的基础类型为int,但您可以使用bytesbyteshortushort,{{1}中的任何一种},intuintlong

ulong

答案 1 :(得分:7)

这只是意味着如果你做Filter-> a,你得到1. Filter-> b是2。

奇怪的十六进制表示法只是表示法。

编辑: 由于这是一个“过滤器”,十六进制表示法更有意义。

通过写入0x1,指定以下位模式:

0000 0001

而0x2是:

0000 0010

这使得如何使用过滤器更加清晰。

因此,例如,如果您想过滤掉设置了较低2位的数据,您可以这样做:

Filter->a | Filter->b

对应于:

0000 0011

十六进制表示法使过滤器的概念更清晰(对某些人来说)。例如,通过查看它可以相对容易地找出0x83F0的二进制数,但对于33776(基数10中的相同数字)来说要困难得多。

答案 2 :(得分:4)

目前尚不清楚你发现不清楚是什么,所以让我们讨论一下:

枚举值已经给出了明确的数值。每个枚举值始终表示为底层存储的数值,但如果您想确定该数值是什么,则必须指定它。

数字以十六进制表示法编写,当您希望数值包含用于屏蔽的单个设置位时,通常会使用此数字。当它写为0x8000时,更容易看到该值只有一位设置为写入32768时的值。

在你的例子中,它并不像你只有两个值那么明显,但对于位过滤,每个值代表一个位,因此每个值都是前一个值的两倍:

public enum Filter {
   First = 0x0001,
   Second = 0x0002,
   Third = 0x0004,
   Fourth = 0x0008
}

您可以使用这样的枚举来过滤值中的单个位:

If ((num & Filter.First) != 0 && (num & Filter.Third) != 0) {
   Console.WriteLine("First and third bits are set.");
}

答案 3 :(得分:2)

答案 4 :(得分:2)

这可能意味着什么。我们需要查看更多代码,以便能够理解它正在做什么。

0x001是数字1。只要你看到0x,就意味着程序员输入了十六进制的数字。

答案 5 :(得分:1)

主要原因是:

在编写如下数字时读取十六进制表示法比较容易:“需要2的x次幂”。

要将枚举类型用作位标志,我们需要以2的幂增加枚举值... 1,2,4,8,16,32,64等。为了保持可读性,使用十六进制表示法。

Ex:2 ^ 10是十六进制的0x10000(整洁干净),但是用经典的十进制表示法写成65536 ...相同的是0x200(十六进制表示法)和512.(2 ^ 9)

答案 6 :(得分:0)

那些看起来像是某种位掩码。但他们的实际值是1和2 ......

您可以为枚举分配值,例如:

enum Example {
    a = 10,
    b = 23,
    c = 0x00FF
}

等...

答案 7 :(得分:0)

使用像这样的十六进制表示法通常表示可能存在一些位操作。我在处理这个问题时经常使用这种表示法,因为你问这个问题的原因 - 这种表示法突然出现在你面前并说:“注意我,我很重要!”

答案 8 :(得分:0)

我们可以使用整数,我们可以避免任何因为枚举的默认性质为其第一个成员分配0,并为下一个可用成员分配增量值。许多开发人员使用它来一次击中两个目标。

  • 使代码复杂化,使其难以理解
  • 十六进制代码更接近二进制代码
  • ,性能更快

我的观点是,如果我们仍在使用为什么我们使用第四代语言再次转向二进制文件

但是使用比特和加密/解密过程的更好的技术