[0161] 浮動小数点,正規化

平成12年度春期 (旧)第2情報処理技術者試験より
数値を16ビットの浮動小数点で、図に示す形式で表す。10進数0.375を正規化した表現はどれか。ここでの正規化は、仮数部の最上位けたが0にならないように指数部と仮数部を調節する操作である。


S :仮数部の符号( 0:正、1:負)
E :指数部( 2を基数とし、負数は2の補数で表現)
M :仮数部( 2進数 絶対値表示)
0 | 0001 | 11000000000
0 | 1001 | 11000000000
0 | 1111 | 11000000000
1 | 0001 | 11000000000

正解

解説

 浮動小数点に関する問題です。

 浮動小数点は、文字通り、「小数点」を「浮動」させることによって、非常に大きい数や小さい数を表すための方法です。例えば、10,000,000 といった大きな数は、1 という数字の小数点を右に7桁分移動させたもの、つまり、正数の 1 を 107 倍したものとして表現することができます。また、0.0000001 といった小さな数は、1 という数字の小数点を左に7桁分移動させたもの、つまり、正数の 1 を 10-7 倍したものと表現することができます。このように、数字の情報(仮数部)と小数点位置の情報(指数部)、正負の符号の情報(符号部)という3つの情報を持つことで、幅広い範囲の数値を簡潔に表現できるようになります。

 浮動小数点もコンピュータで扱われる以上、ビット列で表現しなければなりません。通常、符号部、指数部、仮数部をどのように表現するかは、あらかじめルール化されており、このルールに則った形へ数値表現を変換することを正規化といいます。この問題では、正規化は「仮数部の最上位けたが 0 にならないように指数部と仮数部を調節する操作である」となっています。

 それでは、問題を解いていきましょう。10進数の 0.375は、
    0.375
    = ( 0 × 2-1 ) + ( 1 × 2-2 ) + ( 1 × 2-3
    = 0.011(2)
    = 0.11(2) × 2-1
と表現できます。つまり、仮数部の情報に相当する 0.11(2)という値を、指数部の情報に相当する 2-1倍したものとして考えることができます。

 符号部は、正の数なので、0 となります。

 仮数部は、11ビットで表現するので、11000000000 となります。

 指数部は、2 を基数とした2の補数なので、-1 の2の補数を4ビットで表現したものになります。-1 は負の数なので、4ビットの最大数からちょうど桁上がりした5桁の数 10000(2) から 0001(2)を引きます。
    10000(2) - 0001(2) = 1111(2)
 よって、ウが正解となります。
※ 解説の内容は執筆時点のものであり,含まれている情報の正確性,妥当性について保証するものではありません。ご注意ください・・・

関連する(かもしれない)問題