お蔵入り

clip!clip!
Ads By Google

補数表現について教えてください

nビットのすべてが1である2進法1111…11が表す数値又はその数式はどうして-1になるのでしょうか?
負数は2の補数で表します

教えてください

2008-10-06 18:29の質問
この質問は、30日間解決しなかったために自動的に質問が一旦閉じられました。

回答(2)

1.

2008-10-06 19:00:01
簡単に言えば、
例えば、
1を足すと、
繰り上がりがnビットをオーバーフローし
nビットが0(ゼロ)になります。
1を足して0になる数というと-1ですねsmile
回答レベル : アドバイス

2.

2008-10-07 02:46:34
 与えられた数の2の補数を求める一つの方法は

「1の補数を作って(0、1反転)、それに1を加える」という方法です。

そこで、与えられた補数表現が「11・・・11」のとき、それがいくつを表しているかを知るには、上記の2の補数を求めるのと反対のことをするばいいです。つまり、「1を引き、0と1を反転で1の補数をとる」でいいです。

例えば「11・・・11」であれば、これから1を引くと「11・・・10」。ここで1の補数をとると「00・・・01」。これに符号をつけて「-1」です。

 「負の整数の見方」の項を参照下さい。
回答レベル : 回答
Ads By Google

コメント(5)

2008-10-06 21:49:14

1を足して0になる数というと-1がよく分かりませんでした

#2.  BLUEPIXY
2008-10-07 01:29:54

>>#1
ある数X+1=0;ある数は1を足して0になる数
ある数X=-1

2008-10-07 10:25:02

人間様の解釈の問題。

  1111111111111111 (?)
+0000000000000001 (1)
------------------
  0000000000000000 (0)

ゆえに"1111111111111111"は-1と解釈する。
ここのところがポイント。

2008-10-07 10:44:05

たとえば8ビットで,
1001 0011
を考えると,10進数表記では,
1×(-2^7)+0×2^6+0×2^5+1×2^4 + 0×2^3+0×2^2+1×2^1+1×2^0
という風に最上位ビットだけはマイナスの重みになっています.したがって,最上位以外のビットが全て1の場合,
0111 1111
= 0×(-2^7)+1×2^6+1×2^5+1×2^4 + 1×2^3+1×2^2+1×2^1+1×2^0 = 2^7-1
正の数では最大になり,最上位を1にすると,
1111 1111
= 1×(-2^7)+1×2^6+1×2^5+1×2^4 + 1×2^3+1×2^2+1×2^1+1×2^0
= -2^7+2^7-1
= -1
となります.

2008-10-08 19:03:46

お解りにならないようであれば、このように考えてください。
16ビットのゼロ表現は、

  1111111111111111
+0000000000000001
------------------
  0000000000000000

となります(オーバーフローしています)。
-1は"0000000000000000-0000000000000001"のことなので、上記の式を横書きして

1111111111111111+0000000000000001=0000000000000000

を得ます。この式の"0000000000000001"を右辺へ移項してみると、

1111111111111111=0000000000000000-0000000000000001

右辺は-1のはずです。そして左辺は"111‥‥1"になっています。
正しい解釈は、中央処理装置内で行なっている「繰上り」(carry)や「借り」(borrow)の機構を理解しなければなりません。

トラックバック(2)

トラックバックURL: