-3

C# でいくつかのビット演算子を試していますが、補数が出力を -2 for 1 として計算する方法がわかりません

i が 8 ビット バイナリで 1 を表す場合

1 = 00000001

~1 =11111110 = なぜこれが -2 になるのですか?

    Sample code that i am using in C#


    //Bitwise Compliment
    //1  = 00000001
    //~1 = 11111110 = -2
    Console.WriteLine(~1);
4

7 に答える 7

7

うーん...何を望んでいますか?2 の補数表現を使用しているため、単純に次のようになります。

00000011 = 3
00000010 = 2
00000001 = 1
00000000 = 0
11111111 = -1
11111110 = -2
11111101 = -3
11111100 = -4

ワンコンプライアント表現を使用する場合、次のリストがあり、あなたは正しいでしょう:

00000011 = 3
00000010 = 2
00000001 = 1
00000000 = 0
11111111 = -0 <== Watch this!!!
11111110 = -1
11111101 = -2
11111100 = -3

コンピュータービルダーは負のゼロを持たないことを決定したため、2 の補数表現を作成しました。

ビット単位の補数を実行すると、すべてのビットが逆になります。その00000001結果、11111110単純に -2 になります (2 の補数を使用する場合)。

否定演算子をお探し-ですか?

Console.WriteLine(-1);

ところで:補数否定演算子は、補数演算子に1を加えたものと同じです(2補数表現を使用する場合)。

そう:

-x == ~x + 1;

詳細情報: http://en.wikipedia.org/wiki/Signed_number_representations

于 2013-05-10T11:48:56.133 に答える