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 を与えることを読みました.
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 を与えることを読みました.
印刷している値は のタイプではありません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;