アプリ版:「スタンプのみでお礼する」機能のリリースについて

基本情報試験の過去問をやっているのですが、よく理解できなかったので、解説をお願いします。

●負数を2の補数で表す 16 ビットの符号付き固定小数点数の最小値を表すビット列を, 16 進数として表したものはどれか。


ア 7FFF    イ 8000    ウ 8001    エ FFFF


これの答えはイだそうで、説明では「ア~エの16進数をそれぞれ、2進数、10進数、10進数の絶対値に変換して評価する。」とあり表が載っています。


ア・0111111111111111・・・+32767・・・絶対値が32767
イ・1000000000000000・・・ー32768・・・絶対値が32768
ウ・1000000000000001・・・ー32767・・・絶対値が32767
エ・1111111111111111・・・-1・・・・・・・絶対値が1

これでは、イとウ、エがーの符合になっていますが、なぜそうなるのか、基数変換した時の値はどうやって出しているんでしょうか?
回答よろしくお願いします。

A 回答 (2件)

16ビットの2進数は、符号なしの正の2進数では


最小値が(0000 0000 0000 0000)=0,
最大値が(1111 1111 1111 1111)=2^(16)-1=65535
です。(ビットは2進数の1桁のこと)
符号付2進数の場合は、符号なしの2進数の下半分
0000 0000 0000 0000~0111 1111 1111 1111 = 0~(2^15)-1
これを正の数とします。
上半分を負の数に割り当てます(つまり最上位が1の2進数を負数に割り当てます)。つまり先頭ビットは1ですから質問のイ、ウ、エが負数ということです。では個々の負数はどう表すかが問題ですが。
2の補数法では負数は、符号なし2進数と見なして、同じ大きさの正の数に加えて 2^16=1 0000 0000 0000 0000 = 65536 となる数に対応させます。また
正の整数=32767=(0111 1111 1111 1111)=7FFF
負の最大整数=-32768=(1 0000 0000 0000 0000)-(0111 1111 1111 1111)
= (1000 0000 0000 0000)=8000
となります。つまり先頭の桁(ビット)は正負の符号と言うことです。
次に10進と2進の基数変換は参考URLをご覧下さい。

参考URL:http://www.crew.sfc.keio.ac.jp/projects/2001ipl- …
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2007/03/28 18:44

>これでは、イとウ、エが-の符合になっていますが、なぜそうなるのか


そういう定義なんスけど。

まぁ、1 = 0000....01 に 1111....11 を足せば、オーバーフローして 0 になるから -1 = 1111....11 とするとハードウェア的に作りが簡単になる。

のかな?
    • good
    • 0

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