2010-10-17 23 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