平成19年春期試験問題 午前問3
広告
解説
16ビットの数値表現では、216種類の数字を表わせます。符号なし(正の数のみ)では0~65535、符号付き(正&負)では -32768~32767 までの数値表現することができます。
(-32768~32767= -216-1 ~216-1 -1)
まずは、16進数で表示されているものを2進数に変換してみましょう。
1FFF → 0001 1111 1111 1111
DFFF → 1101 1111 1111 1111
E000 → 1110 0000 0000 0000
FFFF → 1111 1111 1111 1111
符号付き16ビットでは、先頭ビットが符号ビット、下位15ビットの値が絶対値を表します。先頭ビットが0の場合は0~32767、1の場合は -32768~-1を表現します。4つの中では「ア」が正の数、「イ」「ウ」「エ」が負の数を表しているということになります。
「イ」「ウ」「エ」は、2の補数で表現されています。2の補数で表現されたビット列は、もう一度ビット反転させて1を加える処理を行うと、元の値に戻る性質があります。これを使って、それぞれの負数の絶対値を求めます。
正の数なのでそのまま → 0001 1111 1111 1111
1101 1111 1111 1111 → 0010 0000 0000 0001
1110 0000 0000 0000 → 0010 0000 0000 0000
1111 1111 1111 1111 → 0000 0000 0000 0001
これらを4倍してみます。4倍なのでビット列全体を左に2ビットシフトすればOKです。
0001 1111 1111 1111 → 0111 1111 1111 1100
0010 0000 0000 0001 → 1000 0000 0000 0100
0010 0000 0000 0000 → 1000 0000 0000 0000
0000 0000 0000 0001 → 0000 0000 0000 0100
(-32768~32767= -216-1 ~216-1 -1)
まずは、16進数で表示されているものを2進数に変換してみましょう。
1FFF → 0001 1111 1111 1111
DFFF → 1101 1111 1111 1111
E000 → 1110 0000 0000 0000
FFFF → 1111 1111 1111 1111
符号付き16ビットでは、先頭ビットが符号ビット、下位15ビットの値が絶対値を表します。先頭ビットが0の場合は0~32767、1の場合は -32768~-1を表現します。4つの中では「ア」が正の数、「イ」「ウ」「エ」が負の数を表しているということになります。
「イ」「ウ」「エ」は、2の補数で表現されています。2の補数で表現されたビット列は、もう一度ビット反転させて1を加える処理を行うと、元の値に戻る性質があります。これを使って、それぞれの負数の絶対値を求めます。
正の数なのでそのまま → 0001 1111 1111 1111
1101 1111 1111 1111 → 0010 0000 0000 0001
1110 0000 0000 0000 → 0010 0000 0000 0000
1111 1111 1111 1111 → 0000 0000 0000 0001
これらを4倍してみます。4倍なのでビット列全体を左に2ビットシフトすればOKです。
0001 1111 1111 1111 → 0111 1111 1111 1100
0010 0000 0000 0001 → 1000 0000 0000 0100
0010 0000 0000 0000 → 1000 0000 0000 0000
0000 0000 0000 0001 → 0000 0000 0000 0100
- 絶対値は32764です。符号付き16ビットで表現できる範囲内なので、あふれは生じません。
- 正しい。絶対値は32772です。元は負数なので-32772となり、符号付き16ビットで表現できる範囲を超えてしまっているため、あふれが生じます。
- 絶対値は32768です。元は負数なので-32768となり、あふれは生じません。符号付き16ビットで表現できる最も小さい値です。
- 絶対値は4です。あふれは生じません。2の補数表現で、すべてのビットが1である数値が表現しているのは-1であることを覚えておきましょう。
広告