6

C#(3.5)では、次のことを試します。

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

エラー132が発生します:「型'int'を'byte'に暗黙的に変換できません。明示的な変換が存在します(キャストがありませんか?)」。同じことが|でも起こります と^。

私は何が間違っているのですか?なぜintについて尋ねられるのですか?バイトに対してブール論理を実行できないのはなぜですか?

4

2 に答える 2

12

さまざまな演算子は宣言されていませんbyte-両方のオペランドがにプロモートされint、結果はになりintます。たとえば、追加:

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

複合割り当ては機能することに注意してください。

byte1 += byte2;

これについて最近SOの質問がありました。ただし、これはビット単位の演算では特に厄介であり、結果は常に同じサイズである必要があり、論理的に完全に有効な演算であることに同意します。

回避策として、結果をバイトにキャストして戻すことができます。

byte byte3 = (byte) (byte1 & byte2);
于 2009-06-18T09:23:21.750 に答える
0

バイト(およびショート)タイプはこれらの演算子を実装していないため

仕様:4.1.5を参照してください

于 2009-06-18T09:23:45.383 に答える