3

C# で苦労し始めたばかりで、質問があります。

次のコードでは:

byte var = 0;
Console.WriteLine("{0}", ~var);

-1 と表示されるのはなぜですか? http://www.csharp-station.com/Tutorial/CSharp/Lesson02から、バイト範囲が 0 から 255 であり、~(00000000)_2 が (255)_10 に等しい (11111111)_2 を与えることを読みました.

4

1 に答える 1

6

印刷している値は のタイプではありませんbyte。タイプintです。

( ~bitwise not) 演算子は に対して定義されていませんがbyte、に対して定義されていintます。あなたのコードには、 への暗黙的な拡大変換がありintます。コードは、明示的なキャストを使用するこのバージョンとほぼ同等です。

int temp = ~((int)var);
Console.WriteLine("{0}", temp);

ビット単位の not 演算子は、ビットを反転して結果111....111(基数 2) を返します。これは、 2 の補数表現で値 -1 を持ちます。


結果を値 255 のバイトにしたい場合は、明示的なキャストを追加する必要があります。

byte x = 0;
byte result = (byte)~x;
于 2012-12-13T09:22:06.343 に答える