離散数学(全101問中61問目)

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

出典:平成19年春期 問 3

  • 1FFF
  • DFFF
  • E000
  • FFFF
正解 問題へ
分野:テクノロジ系
中分類:基礎理論
小分類:離散数学
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
  • 絶対値は32764です。符号付き16ビットで表現できる範囲内なので、あふれは生じません。
  • 正しい。絶対値は32772です。元は負数なので-32772となり、符号付き16ビットで表現できる範囲を超えてしまっているため、あふれが生じます。
  • 絶対値は32768です。元は負数なので-32768となり、あふれは生じません。符号付き16ビットで表現できる最も小さい値です。
  • 絶対値は4です。あふれは生じません。2の補数表現で、すべてのビットが1である数値が表現しているのは-1であることを覚えておきましょう。

Pagetop