なぜバイトに対してブールロジックを実行できないのですか?
-
06-07-2019 - |
質問
C#(3.5)では、次を試します:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
そしてエラー132が表示されます:"暗黙的に型 'int'を 'byte'に変換できません。明示的な変換が存在します(キャストを見逃していますか?)」。同じことが起こります|および^。
間違っているのは何ですか?なぜintsについて尋ねられるのですか?バイトに対してブールロジックを実行できないのはなぜですか?
解決
さまざまな演算子は byte
に対して宣言されていません-両方のオペランドが int
に昇格され、結果は int
になります。たとえば、追加:
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error
複合割り当ては機能することに注意してください:
byte1 += byte2;
これに関する最近のSO質問がありました。ただし、結果は常に同じサイズである必要があり、論理的に完全に有効な操作であるため、ビット単位の操作では特に面倒です。
回避策として、結果をバイトにキャストすることができます。
byte byte3 = (byte) (byte1 & byte2);
他のヒント
バイト(および短い)型はこれらの演算子を実装しないため
仕様を参照してください:4.1.5
所属していません StackOverflow