• ベストアンサー

2進数の補数表示について

よろしくお願いします 「負の数(-128)を8ビットの2の補数表示するとき、どうなるか?」 の問題で、わからない箇所があります。 1.最上位ビットは正・負を表す。 2.負の数:-127を2の補数を使用して表現する。    (例)-1(10)==>    まず、正で考える。      ==> 0000 0001(2)      「確認」 1111 1110(反転)            +1(プラス1) ---------- 1111 1111(2)(答え) -127(10)      ==>0111 1111(2)  まず、正で表す。    「確認」        1000 0000(反転)           +1 (プラス1) ---------- 1000 0001(答え) ここからが疑問なんです。    -128(10)の場合      ==>1000 0000(2) まず、正で考える。    「確認」        0111 1111(反転) +1 (プラス1)       -----------      1000 0000(2)(答え) ↑ ・答えがプラスの128(10)=>10000000(2)と同じではない  でしょうか? ・このときの最上位ビットは桁上がりの「1」と正負の違  いを表す「1」のどちらを表しているのですか? ・たとえば「負数を2の補数で表すとき,8ビットで  表現できる整数の範囲は10進数でどれか。」など  の問題で答えが正の127は理解できるのですが、  負は「-128」ということがよくわかりません。 一応検索をしてみましたが、類似回答では理解できませんでした。よろしくお願いします。        

質問者が選んだベストアンサー

  • ベストアンサー
  • zak33697
  • ベストアンサー率27% (275/1016)
回答No.3

2の補数では、MSBが正負の符号の役目をするので 8bitでは、 正の数の最大値は +127D=0111 1111まで 負の数の最大値は -128D=1000 0000迄です。  +127D=0 111 1111 +)-128D=1 000 0000 ------------------ - 1D=1 111 1111 正の数で+128D以上を現したければ 9bit(MSBが符号)が必要で +128D=0 1000 0000 -128D=1 1000 0000 と表す必要があります。 +128D=0 1000 0000 +)-128D=1 1000 0000 -------------------- 0D=0 0000 0000 この様に 2の補数の利点は符号ビットも含めマイナス演算をプラスの論理演算でできることです。

oshiete2006
質問者

お礼

お礼が遅くなりすいません。どうもありがとうございました。今後もよろしくお願いします。

その他の回答 (4)

  • mii-japan
  • ベストアンサー率30% (874/2820)
回答No.5

>・答えがプラスの128(10)=>10000000(2)と同じではないでしょうか? 同じです 他の回答の様に 最上位ビットで正負を表す8ビットの2進数と定義したのですから、+128は表現できません 4桁の正の10進数と定義すれば、その範囲は0~9999で負と10000以上は表現できないのと同様です 質問の場合、表現できる範囲は、-128~127で 127に1を加えれば -128になります

oshiete2006
質問者

お礼

お礼が遅くなりすいません。どうもありがとうございました。今後もよろしくお願いします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

・答えがプラスの128(10)=>10000000(2)と同じではない  でしょうか? >1.最上位ビットは正・負を表す。 と決めたんですから、 10000000 は、負の数ですね。 ・このときの最上位ビットは桁上がりの「1」と正負の違  いを表す「1」のどちらを表しているのですか? 2の補数で表す計算では、同じになります。 うまくできているということですね。 ・たとえば「負数を2の補数で表すとき,8ビットで  表現できる整数の範囲は10進数でどれか。」など  の問題で答えが正の127は理解できるのですが、  負は「-128」ということがよくわかりません。 -128+127 を計算してみると-1 になるのがわかると思います。

oshiete2006
質問者

お礼

お礼が遅くなりすいません。どうもありがとうございました。今後もよろしくお願いします。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

最上位ビットを符号に使うという約束ですから +128は8ビットでは表現できません。 説明のために使うとしても「仮に」です。 従って-128~0~+127が範囲です。 気持ち悪ければ16ビットで±128をやってみて頭8ビットをちょん切ればいいでしょう。 上の計算は ここからが疑問なんです。    -128(10)の場合      ==>0000 0000 1000 0000(2) まず、正で考える。    「確認」        1111 1111 0111 1111(反転)                     +1 (プラス1)       -----------      1111 1111 1000 0000(2)(答え) ↑     頭8ビットカットすれば正しいー128になります。

oshiete2006
質問者

お礼

お礼が遅くなりすいません。どうもありがとうございました。今後もよろしくお願いします。

回答No.1

Wikiの符号付数値表現の項で、わかるかと思います。

参考URL:
http://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E4%BB%98%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE
oshiete2006
質問者

お礼

お礼が遅くなりすいません。どうもありがとうございました。今後もよろしくお願いします。

関連するQ&A