在C#(3.5),我嘗試以下方法:爲什麼我不能在字節上做布爾邏輯?
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
,我得到錯誤132:「無法隱式轉換類型‘詮釋’到‘字節’的顯式轉換存在(是否缺少強制轉換?) 」。 | |也會發生同樣的情況和^。
我在做什麼錯?爲什麼它問我有關整數?爲什麼我不能在字節上做布爾邏輯?
在C#(3.5),我嘗試以下方法:爲什麼我不能在字節上做布爾邏輯?
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
,我得到錯誤132:「無法隱式轉換類型‘詮釋’到‘字節’的顯式轉換存在(是否缺少強制轉換?) 」。 | |也會發生同樣的情況和^。
我在做什麼錯?爲什麼它問我有關整數?爲什麼我不能在字節上做布爾邏輯?
對於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);
因爲字節(短)類型不實現這些運營商
見規格表:4.1.5
.NET中的所有算術都基於int。有一個相關的問題還有一些討論。這不是您的問題的答案,但您可能會對C#如何處理算術有所瞭解:http://stackoverflow.com/questions/941584/byte-byte-int-why – 2009-06-18 09:26:26
「因爲C#不是完美的語言「,我是如何解釋這一點的。這是它的一個瑕疵(與其他語言相比,C#有迄今爲止最少和最不具有影響力的疣...) – 2012-09-25 11:19:52