dポイントプレゼントキャンペーン実施中!

よろしくお願いします

「負の数(-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」ということがよくわかりません。

一応検索をしてみましたが、類似回答では理解できませんでした。よろしくお願いします。        

A 回答 (5件)

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の補数の利点は符号ビットも含めマイナス演算をプラスの論理演算でできることです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/21 22:17

>・答えがプラスの128(10)=>10000000(2)と同じではないでしょうか?



同じです
他の回答の様に 最上位ビットで正負を表す8ビットの2進数と定義したのですから、+128は表現できません

4桁の正の10進数と定義すれば、その範囲は0~9999で負と10000以上は表現できないのと同様です

質問の場合、表現できる範囲は、-128~127で
127に1を加えれば -128になります
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/21 22:18

・答えがプラスの128(10)=>10000000(2)と同じではない


 でしょうか?
>1.最上位ビットは正・負を表す。
と決めたんですから、
10000000 は、負の数ですね。

・このときの最上位ビットは桁上がりの「1」と正負の違
 いを表す「1」のどちらを表しているのですか?
2の補数で表す計算では、同じになります。
うまくできているということですね。

・たとえば「負数を2の補数で表すとき,8ビットで
 表現できる整数の範囲は10進数でどれか。」など
 の問題で答えが正の127は理解できるのですが、
 負は「-128」ということがよくわかりません。
-128+127 を計算してみると-1 になるのがわかると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/21 22:17

最上位ビットを符号に使うという約束ですから


+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になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/21 22:17

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



参考URL:http://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7% …
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/21 22:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!