マナビング基本情報技術者

16進数の小数を分数に直すときの桁の重みと約分の手順

基本情報技術者試験 平成30年度秋期 午前 問1 / 基礎理論 › 離散数学

過去問にチャレンジ

平成30年度秋期 午前 問1

16進数の小数0.248を10進数の分数で表したものはどれか。

  1. ア

    3132\frac{31}{32}

  2. イ

    31125\frac{31}{125}

  3. ウ

    31512\frac{31}{512}

  4. エ

    73512\frac{73}{512}

会話形式の解説

講師講師
今回は基数変換、つまり数の表し方を別の進数に直す問題です。16進数の小数を10進数の分数に直すので、小数点以下の各桁にどんな重みが付くかがポイントになります。
受験者受験者
0.248を見て、私は最初に248/1000を約分しそうになりました。そうすると31/125になって、選択肢にもあります。
講師講師
その31/125は、0.248を10進数の小数として読んだときの値です。この問題の0.248は16進数なので、小数第1位は1/10ではなく1/16になります。第2位と第3位の重みは何になると思いますか。
受験者受験者
10進数で1/10、1/100、1/1000と進むのと同じように考えると、1/16、1/256、1/4096ですね。
講師講師
そのとおりです。n進数の小数第k位の重みは、nのマイナスk乗です。では、各桁の数字に重みを掛けて足してみましょう。
受験者受験者
2/16+4/256+8/4096です。分母がばらばらで、計算に時間がかかりそうです。
講師講師
いちばん下の桁の重みである4096を共通の分母にすると、まとめて計算できます。2/16は512/4096、4/256は64/4096になります。
受験者受験者
そうすると、(512+64+8)/4096=584/4096です。どちらも8で割れるので、73/512になります。
講師講師
正解です。検算として小数に直すと、0.125+0.015625+0.001953125=0.142578125になります。73÷512も0.142578125です。
受験者受験者
31/512も分母が同じなので迷いそうです。でも、分母を512にそろえたときの分子は73なので、31は合いませんね。
講師講師
そうです。31/512は約0.06なので、実際の値の約0.14とは違います。31/32は約0.97なので、大きく外れています。大まかな値を見積もるだけでも、候補を絞れます。
受験者受験者
31/125は分母が5の3乗です。16進数を分数にした場合は、分母に5が出てこないということでしょうか。
講師講師
よいところに気づきました。16進数の有限小数を約分すると、分母は必ず2のべき乗になります。分母に5を含む分数は、それだけで候補から外せます。
講師講師
別の解き方として、2進数を経由する方法もあります。16進数の1桁は2進数の4桁に当たるので、0.248は2進数で0.001001001000です。これを3桁ずつに区切ると8進数の0.111になり、(64+8+1)/512=73/512と求められます。計算が苦手な場合は、自分が確実にできる方法を一つ決めておくと安心です。

まとめ

16進数の小数を10進数の分数に直すときは、小数第k位に16のマイナスk乗の重みを掛けて合計します。(0.248)16は2/16+4/256+8/4096で、分母を4096にそろえると584/4096となり、8で約分して73/512になります。0.248を10進数の小数として読んだ31/125は誤りです。16進数の有限小数を約分すると分母は2のべき乗になるので、分母に5を含む選択肢は外せます。2進数を経由して8進数の0.111に直す方法でも、同じ73/512が得られます。

解答・解説

正解はエです

この問題のテーマ

16進数の小数を10進数の分数に直す、基数変換の問題です。小数点以下の各桁の重みを正しく使えるかが問われています。

解き方の考え方

16進数では、小数第1位の重みが1/16、第2位が1/1621/16^{2}、第3位が1/1631/16^{3}です。(0.248)16 の各桁の数字にこの重みを掛けて足し、最後に約分します。具体的には、2/16+4/256+8/4096 を分母4096にそろえると (512+64+8)/4096=584/4096 です。分子と分母を最大公約数の8で割ると73/512になり、正解のエと一致します。検算として小数に直すと、0.125+0.015625+0.001953125=0.142578125 で、73÷512 も 0.142578125 になります。

選択肢ごとの解説

  1. ×ア  3132\frac{31}{32}
    アの31/32は約0.97です。重みを足した実際の値は約0.14なので、大きく離れています。
  2. ×イ  31125\frac{31}{125}
    イの31/125は、0.248を10進数の小数とみなして248/1000を約分した値です。16進数の桁の重み(1/16、1/256…)を使っていないので、この問題の答えにはなりません。
  3. ×ウ  31512\frac{31}{512}
    ウは分母が512で、正しい値と同じです。しかし、分母を512にそろえたときの正しい分子は73なので、分子の31は合いません。小数に直すと31/512は約0.06で、実際の値の約0.14とも一致しません。
  4. ○エ  73512\frac{73}{512}
    各桁に16の負のべき乗の重みを掛けて合計し、約分すると73/512になります。エの値はこれと一致するので、エが正解です。

補足

2進数を経由して解く方法もあります。16進数の1桁は2進数の4桁に当たるので、(0.248)16 は (0.001001001000)2 です。これを3桁ずつに区切ると8進数の (0.111)8 になり、(64+8+1)/512=73/512 と求められます。

POINT

  • n進数の小数第k位の重みは、nのマイナスk乗です。
  • 16進数の小数は、最も下の桁の重み(ここでは163=409616^{3} = 4096)を共通分母にすると、まとめて計算しやすくなります。
  • 分数にした後は、分子と分母の最大公約数で約分してから選択肢と比べます。
  • 16進数の有限小数を約分すると分母は2のべき乗になるので、分母に5を含む分数は候補から外せます。

※出典:平成30年度秋期 基本情報技術者試験 午前 問1