2009-06-18 8 views
6

私は次のことを試してください。なぜブール論理をバイト単位で行うことができないのですか? C#(3.5)では

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

と、私はエラー132を取得:「暗黙的に明示的な変換が存在する 『バイト』に型 『int型』を変換できません(あなたはキャストが欠けています?) " |同じことが|と^。

私は間違っていますか?なぜそれについて私に尋ねるのですか?バイトでブール論理を使用できないのはなぜですか?

+2

.NETでのすべての算術演算はintに基づいています。関連する質問があります。これはあなたの質問に対する答えではありませんが、一般的にC#がどのように算術演算を扱うかについていくつかの洞察を得るかもしれません:http://stackoverflow.com/questions/941584/byte-byte-int-why –

+0

"C#は完璧ではない私はこれをどのように説明するかです。これはいぼのひとつです(そして、他の言語と比較しても、C#はこれまでの中で最も有害なものではありません)... –

答えて

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

C#はbyte + byteを "int"型として評価します。結果を1バイトに戻したいのですが、vb.netは悪いです。 'Byte'型の2つの変数または定義された定数は型 'Byte'として追加されます(結果が 'Integer'に代入されても結果が255より大きい場合は死にます)。ただし、直接割り当ては整数と見なされます。それはいいですが、vb.netはブール演算子を主に目立つように扱いますが(xとyのサイズは小さい*符号なしオペランドのサイズでなければなりません) – supercat

0

バイト(ショート)タイプは、これらの事業者は実装していないので

参照仕様を:4.1.5

関連する問題