2010-10-17 26 views
1

我知道可以使用(:ulong,:uint,:ushort,:byte)将使用带符号或无符号64,32,16和8位值的枚举作为它们的基础valud类型)。但是有可能创建一个4位枚举?C#中的4位Enum

(我正在写一些代码,将与C++和我有在C#中的返回类型的结构互操作有一个场,这将是最自然的,因为4位结构。)

+3

我认为你的处理器不会以任何方式自然地找到一个4位的值。 – tster 2010-10-17 20:34:38

+1

这样的事情不会被填充到更大的宽度,或我的方式? – ChaosPandion 2010-10-17 20:34:40

+1

@Chaos:你没有弄错。英特尔的“自然”最小尺寸是8位。迈克尔想要的是可能的,但最好通过将两个有限范围的8位枚举组合在一起来完成。 – 2010-10-17 20:37:22

回答

4

从C#规格:

经批准的类型枚举是 bytesbyteshortushortintuintlong,或ulong

这些都不是4位类型。你在C++端也会遇到同样的问题。

+2

C++有位字段。你可以说结构字段使用了多少位。 – Gabe 2010-10-17 21:06:51

+1

是的,在C++方面,它只是在结构中执行“:4”的问题,然后他们#定义了16个可能的值。在C#端很容易,只需将其中两个:4个值合并为一个字节即可。但是,我必须分别查看它的低4位和高4位。 – 2010-10-17 21:42:13

1

但是有可能创建一个4位枚举?

不,主要是因为那将是尴尬和缓慢。在语法上,不存在4位类型来指定为基本类型。

与C++和我在C#中用于返回类型的结构有一个字段最适合作为4位结构。

我非常怀疑,C++可以处理位字段,但这是非常有效的(除了可能在空间中)。

使用C++进行互操作很困难,当返回类型是您的选择时,请不要让它变得比它必须更难。

+0

为什么4位有符号和无符号值类型比8位或16位类型多或少比较尴尬和缓慢?两者都小于机器的内存大小(32位或64位)。 – 2010-10-20 11:28:21

+0

另外,这里会非常自然,因为在C++中,它们有一个UInt8,它们使​​用:4语法分成两个4位字段。两者都代表X和Y的16个可能的状态。在我的C#结构中,我想要有两个代表X和Y状态的4位字段。相反,我必须有一个代表状态的UInt8(字节)字段X和Y在一起。 – 2010-10-20 11:33:44

+0

@Michael,Byte是大多数硬件上最小的可寻址单元,大约与原生32/64位字一样快。对于4位,编译器必须插入额外的掩码操作。 – 2010-10-20 11:42:05