2009-06-18 65 views
6

在C#(3.5),我嘗試以下方法:爲什麼我不能在字節上做布爾邏輯?

byte byte1 = 0x00; 
byte byte2 = 0x00; 
byte byte3 = byte1 & byte2; 

,我得到錯誤132:「無法隱式轉換類型‘詮釋’到‘字節’的顯式轉換存在(是否缺少強制轉換?) 」。 | |也會發生同樣的情況和^。

我在做什麼錯?爲什麼它問我有關整數?爲什麼我不能在字節上做布爾邏輯?

+2

.NET中的所有算術都基於int。有一個相關的問題還有一些討論。這不是您的問題的答案,但您可能會對C#如何處理算術有所瞭解:http://stackoverflow.com/questions/941584/byte-byte-int-why – 2009-06-18 09:26:26

+0

「因爲C#不是完美的語言「,我是如何解釋這一點的。這是它的一個瑕疵(與其他語言相比,C#有迄今爲止最少和最不具有影響力的疣...) – 2012-09-25 11:19:52

回答

12

對於byte,並未聲明各種運算符 - 兩個操作數都被提升爲int,結果爲int。例如,除了:

byte byte1 = 0x00; 
byte byte2 = 0x00; 
byte byte3 = byte1 + byte2; // Compilation error 

需要注意的是複合賦值做的工作:

byte1 += byte2; 

有一個recent SO question on this。我同意這對於按位運算來說尤其令人厭煩,但結果應該總是相同的大小,並且這是一個邏輯上完全有效的操作。

作爲一種變通方法,你可以把結果返回字節:

byte byte3 = (byte) (byte1 & byte2); 
0

因爲字節(短)類型不實現這些運營商

見規格表:4.1.5