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;