我有这样的枚举声明:
public enum Filter
{
a = 0x0001;
b = 0x0002;
}
这是什么意思?他们正在使用它来过滤数组。
答案 0 :(得分:10)
这意味着它们是分配给这些名称的整数值。枚举基本上只是命名数字。您可以在枚举的基础类型和枚举值之间进行转换。
例如:
public enum Colour
{
Red = 1,
Blue = 2,
Green = 3
}
Colour green = (Colour) 3;
int three = (int) Colour.Green;
默认情况下,枚举的基础类型为int
,但您可以使用byte
,sbyte
,short
,ushort
,{{1}中的任何一种},int
,uint
或long
:
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,并为下一个可用成员分配增量值。许多开发人员使用它来一次击中两个目标。
我的观点是,如果我们仍在使用为什么我们使用第四代语言再次转向二进制文件
但是使用比特和加密/解密过程的更好的技术