web-dev-qa-db-ja.com

2の補数手法で負の数を表しますか?

2の補数を使用して負の数を2進数で表します

ケース1:数値-5

2の補数手法によると:

5をバイナリ形式に変換します。

00000101、次にビットを反転します

11111010、次に1を追加します

00000001

=>結果:11111011

これが正しいことを確認するために、10進数に再計算します。

-128 + 64 + 32 + 16 + 8 + 2 + 1 = -5

ケース2:番号-240

同じ手順が実行されます。

11110000

00001111

00000001

00010000 => recalculate this I got 16, not -240

私は何かを誤解していますか?

9
ipkiss

問題は、240を8ビットだけで表現しようとしていることです。 8ビットの符号付き数値の範囲は-128〜127です。

代わりに9ビットで表すと、正しい答えが得られることがわかります。

011110000 (240)

100001111 (flip the signs)
+
000000001 (1)

=

100010000

=

-256 + 16 = -240
12
Spencer Uresk

署名時に-240を8ビットで表すことができないことを忘れましたか?

4
prajeesh kumar

8ビットで表現できる最小の負の数は-128で、これは_10000000_です。

2の補数の使用:

 128 = 10000000 
(フリップ)= 01111111 
(1を追加)= 10000000 

Nビット(もちろん符号付き整数)で表現できる最小の負の数は、常に- 2 ^ (N - 1)です。

3
Ates Goral