あなたの質問に答えるために、最初の 001011 は -53 と等しくありません。これは間違った答えです。最上位ビットは 1 ではなく 0 であるため、正でなければならないことがわかっています。
例として、4 - 57 を実行してみましょう。これは 4 + (-57) と同じです。
2 進数に変換すると (この例では 1 バイトだけを使用します)、4 は 0000 0100、57 は 0011 1001 になります。57を負の 57 に変換するには、2 の補数を使用します
。 0111
したがって、次の式が得られます。
0000 0100
+ 1100 0111
------------
1100 1011
行を足し合わせるだけで答えが得られます。得られた答えは 1100 1011 です。最上位ビット (ここでは一番左) が 1 であるため、負であることがわかります。その大きさを見つけるために、2 の補数を適用します
。1. 否定: 0011 0100
2. 1 を追加します。 0011 0101
これは 10 進法の 53 に等しい。
それが正しいかどうかを確認する別の方法は、数値の正のバージョンを追加することです。
1100 1011
+ 0011 0101
------------
10000 0000
2 の補数は 2^n (n はビット数) から減算される数として定義されるため、常にこの合計の結果が得られます。1 の桁をたたき落とすと、残ったものが 0 になるのは興味深いことです。また、任意の数とその負数を足すと 0 になります。