C#(3.5)では、次のことを試します。
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
エラー132が発生します:「型'int'を'byte'に暗黙的に変換できません。明示的な変換が存在します(キャストがありませんか?)」。同じことが|でも起こります と^。
私は何が間違っているのですか?なぜintについて尋ねられるのですか?バイトに対してブール論理を実行できないのはなぜですか?
C#(3.5)では、次のことを試します。
byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;
エラー132が発生します:「型'int'を'byte'に暗黙的に変換できません。明示的な変換が存在します(キャストがありませんか?)」。同じことが|でも起こります と^。
私は何が間違っているのですか?なぜintについて尋ねられるのですか?バイトに対してブール論理を実行できないのはなぜですか?
さまざまな演算子は宣言されていません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を参照してください