※ ChatGPTを利用し、要約された質問です(原文:問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示)
負数を2の補数で表現する符号付き16ビットの2進数の問題について
このQ&Aのポイント
負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示し、4倍するとあふれるものはどれか。
16進数で表現した場合、負数と正数の2進数表現は異なる。
問題の解き方については解説が異なるが、正しい解法は2の補数を使用すること。
問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示
問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち、4倍するとあふれが生じるものはどれか。
ア 1FFF
イ DFFF
ウ E000
エ FFFF
以下は、それぞれを2進数表示にしたものです。
先頭の符号ビットは[0]の表記で目立たせてあります。
ア [0]001 1111 1111 1111
イ [1]101 1111 1111 1111
ウ [1]110 0000 0000 0000
エ [1]111 1111 1111 1111
以下は、4倍したもの
ア [0]111 1111 1111 1100
イ [0]111 1111 1111 1100
ウ [1]011 0000 0000 0000
エ [1]111 1111 1111 1100
この場合は、ア以外は負数ですが、『負数を2の補数で表現する符号付き16ビットの2進数を、16進数で表現した場合』は16進数が正の数でも、2進数だと負数になると言う事でしょうか?
また、符号付きでない場合は、上記はすべて正の数と言う事で合ってますか?
回答を見る感じでは16進数を2進数に変換しただけで、『2の補数で表現』の部分がないように思えます。この辺りも知りたいです。
問題の解き方についても疑問があります。
http://questionbox.jp.msn.com/qa4278151.html
での回答では、
イ DFFF
→(シフト前)1101 1111 1111 1111
→(シフト後)0111 1111 1111 1100
先頭ビットが1から0に変わったので「桁あふれ」。
問題集の回答ではこっちで説明されていました。
http://okwave.jp/qa/q4302488.html
のANo2回答では
(シフト前)[1]101 1111 1111 1111
(シフト後)[1]111 1111 1111 1100
2の補数表現による負の数の場合,シフト操作によって1が消えていくのは問題ない。
シフト操作によって0が消えると結果が変になる。これが「あふれ」
符号はシフトさせず、左に2つシフトさせた事で、10が消えた事で桁あふれとしています。
ANo1の回答では、
DFFFだと同様に
1101 1111 1111 1111で1の補数は
0010 0000 0000 0000 2の補数は
0010 0000 0000 0001 つまり、-8193ですよね。
4倍すると、-32772で、これは16ビットの2の補数表現
で表現できる数の範囲からあふれてしまいます。
DFFFなどの2進数に変換後、2の補数を使用するのが正しいのでしょうか?
最初の2つの回答では2の補数を使用していなかったので、疑問に思っています。
頭が混乱しております・・・。
回答宜しくお願い致します。
お礼
お礼が遅くなりすいませんでした。 回答ありがとうございました。