こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

基本情報技術者

負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち,4倍するとあふれが生じるものはどれか。


ア 1FFF   イ DFFF   ウ E000   エ FFFF

(平成19年春 問3)

この問題の解説で
E000の2進表示は1110 1111 1111 1111と書いてありました。
どの問題集を見てもそうかいてあります。
1110 0000 0000 0000ではないんですか??

またあふれがでるっていうのはどういうことなんですか?

いまいちよくわかりません。

投稿日時 - 2008-09-04 09:46:04

QNo.4302488

困ってます

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

回答に対して一言もお礼を返さない質問者には
私は基本的に回答しないことにしているのですけれど,
ANo.1がちょっと気になったので今回は回答してみます。

ANo.1ではわざわざ10進数に基数変換していますが,そうする必要は
とくになくて,ビット列からあふれを判断すればいいと思います。

数値を4倍するとは,左に2ビット算術シフトするということ。
算術シフトとは,符号ビットを固定し,符号ビット以外をシフト対象とする操作です。

正の数を算術シフトする例として「ア 1FFF」のデータを用いてみます。先頭の符号ビットは[0]の表記で目立たせてあります。

(a) [0]001 1111 1111 1111 = (8191)10
             ↓左に1ビット算術シフト
(b) [0]011 1111 1111 1110 = (16382)10
             ↓左に1ビット算術シフト
(c) [0]111 1111 1111 1100 = (32764)10
             ↓左に1ビット算術シフト
(d) [0]111 1111 1111 1000 = (32760)10

(a)~(c)までは正しい計算結果が求められていますが,(d)で結果が変になったことがわかります。(c)→(d)の1ビットシフトにおいて「1」が左端からあふれたからです。
結論はこうなります。

  正の数の場合,シフト操作によって0が消えていくのは問題ない。
  シフト操作によって1が消えると結果が変になる。これが「あふれ」

2の補数表現による負の数の場合,結論はこうなります。

  負の数の場合,シフト操作によって1が消えていくのは問題ない。
  シフト操作によって0が消えると結果が変になる。これが「あふれ」

ア [0]001 1111 1111 1111
イ [1]101 1111 1111 1111
ウ [1]110 0000 0000 0000
エ [1]111 1111 1111 1111

アが前者の「正の数であり,左に2ビット算術シフトによって0が2つ消える」,
ウとエが後者の「負の数であり,左に2ビット算術シフトによって1が2つ消える」
という,問題ないビット列であるのに対して,
イだけは「左に2ビット算術シフトによって,1と0が消える」
という,結果が変になるビット列です。このイだけが,あふれが生じています。

投稿日時 - 2008-09-04 15:16:15

お礼

詳しい回答ありがとうございます。

すごい分かりやすかったです。

投稿日時 - 2008-09-05 00:00:58

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

E000を2進数で表現すると、
1110 0000 0000 0000 (あってます!)

で、これがどのような数を示しているかというと2の補数なので
ビットを反転させて(1の補数)
0001 1111 1111 1111
1を加える
0010 0000 0000 0000
符号はマイナスだったので、つまり-8192だった訳です。
これを4倍すると、-32768、これは16ビットの2の補数表現
で表現できる数の範囲
+32767(0111 1111 1111 1111)から
-32768(1000 0000 0000 0000)に入ってます。

DFFFだと同様に
1101 1111 1111 1111で1の補数は
0010 0000 0000 0000 2の補数は
0010 0000 0000 0001 つまり、-8193ですよね。
4倍すると、-32772で、これは16ビットの2の補数表現
で表現できる数の範囲からあふれてしまいます。

投稿日時 - 2008-09-04 10:26:10

お礼

あふれについてよく分かりました。慣れないと難しいですね。

ありがとうございます。

投稿日時 - 2008-09-04 23:58:38

あなたにオススメの質問