1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

進数変換の小数部分の計算方法を整理してみた

1
Posted at

目次

  1. はじめに
  2. 10進数から他の進数への変換
  3. 2進数から他の進数への変換
  4. 8進数から他の進数への変換
  5. 16進数から他の進数への変換
  6. まとめ

はじめに

基本情報技術者試験の学習を進めていく中で、進数変換の整数部分は理解できたものの、小数部分の変換方法が曖昧なまま放置していました。特に2進数や16進数で小数を扱う場面に遭遇した際、正確な変換手順が分からず困ることがありました。今回は進数変換における小数部分の扱い方について、備忘録としてまとめます。

10進数から他の進数への変換

10進数の小数を他の進数に変換する際は、整数部分とは異なるアプローチが必要です。整数部分は割り算を使いますが、小数部分は掛け算を使います。

【10進数から2進数への変換】

10進数の小数部分を2進数に変換するには、小数部分に2を掛け続ける方法を使います。

【具体的な手順】

  1. 小数部分に2を掛ける
  2. 結果の整数部分(0または1)を記録する
  3. 結果の小数部分を取り出す
  4. 小数部分が0になるか、必要な桁数に達するまで手順1〜3を繰り返す
  5. 記録した整数部分を上から順に並べる

例として、10進数の0.625を2進数に変換してみます。

0.625 × 2 = 1.25  → 整数部分は1、小数部分は0.25
0.25  × 2 = 0.5   → 整数部分は0、小数部分は0.5
0.5   × 2 = 1.0   → 整数部分は1、小数部分は0(終了)

上から順に整数部分を読むと「101」となるので、0.625(10進数) = 0.101(2進数)です。

無限小数になる場合

10進数で有限小数でも、2進数では無限小数になることがあります。例えば0.1(10進数)は2進数では0.00011001100...(循環)となります。

【10進数から8進数への変換】

10進数の小数部分を8進数に変換する手順は、2進数への変換と同じで、掛ける数が8になるだけです。

例として、10進数の0.625を8進数に変換してみます。

0.625 × 8 = 5.0  → 整数部分は5、小数部分は0(終了)

したがって、0.625(10進数) = 0.5(8進数)です。

【10進数から16進数への変換】

10進数の小数部分を16進数に変換する手順も同じで、掛ける数が16になります。整数部分が10以上の場合はA〜Fに変換します。

例として、10進数の0.625を16進数に変換してみます。

0.625 × 16 = 10.0  → 整数部分は10(Aに変換)、小数部分は0(終了)

したがって、0.625(10進数) = 0.A(16進数)です。

別の例として、0.3を16進数に変換してみます。

0.3   × 16 = 4.8   → 整数部分は4、小数部分は0.8
0.8   × 16 = 12.8  → 整数部分は12(Cに変換)、小数部分は0.8
0.8   × 16 = 12.8  → 以降、0.8が繰り返される

この場合、0.3(10進数) = 0.4CCC...(16進数)となり、Cが循環します。

2進数から他の進数への変換

8進数や16進数への変換は、グループ化(桁をまとめる方法)を使うと簡単です。

【2進数から8進数への変換】

2進数から8進数への変換は、小数点から右に向かって3桁ずつグループ化する方法が便利です。8は2の3乗(2³ = 8)なので、2進数の3桁が8進数の1桁に対応します。

【具体的な手順】

  1. 小数点の右側から3桁ずつグループに分ける
  2. 最後のグループが3桁に満たない場合は、右側に0を追加する
  3. 各グループを8進数の1桁に変換する

例として、2進数の0.101001を8進数に変換してみます。

0.101001(2進数)
↓ 3桁ずつグループ化
0.101 001
↓ 各グループを8進数に変換
  5   1

したがって、0.101001(2進数) = 0.51(8進数)です。

【2進数から16進数への変換】

2進数から16進数への変換は、8進数への変換と同様にグループ化を使います。16は2の4乗(2⁴ = 16)なので、2進数の4桁が16進数の1桁に対応します。

【具体的な手順】

  1. 小数点の右側から4桁ずつグループに分ける
  2. 最後のグループが4桁に満たない場合は、右側に0を追加する
  3. 各グループを16進数の1桁に変換する

例として、2進数の0.10110100を16進数に変換してみます。

0.10110100(2進数)
↓ 4桁ずつグループ化
0.1011 0100
↓ 各グループを16進数に変換
  B    4

したがって、0.10110100(2進数) = 0.B4(16進数)です。

【2進数から10進数への変換】

2進数の小数部分を10進数に変換するには、各桁を分母が 2n の分数に変換して合計する方法を使います。

小数第1位の分母は 21(つまり2)、小数第2位の分母は 22(つまり4)、小数第3位の分母は 23(つまり8)となります。

例として、2進数の0.101を10進数に変換してみます。

0.101(2進数)
= 1/2¹ + 0/2² + 1/2³
= 1/2 + 0/4 + 1/8
= 0.5 + 0 + 0.125
= 0.625

したがって、0.101(2進数) = 0.625(10進数)です。

別の例として、2進数の0.11を変換してみます。

0.11(2進数)
= 1/2¹ + 1/2²
= 1/2 + 1/4
= 0.5 + 0.25
= 0.75

したがって、0.11(2進数) = 0.75(10進数)です。

8進数から他の進数への変換

2進数への変換は展開(各桁を複数桁に分解する方法)を使い、10進数への変換は割り算を使います。

【8進数から2進数への変換】

8進数から2進数への変換は、各桁を3桁の2進数に展開する方法が便利です。8進数の1桁は2進数の3桁に対応します。

【具体的な手順】

  1. 8進数の各桁を3桁の2進数に変換する
  2. 変換した2進数を順に並べる
  3. 不要な先頭の0は省略できる

例として、8進数の0.51を2進数に変換してみます。

0.51(8進数)
↓ 各桁を3桁の2進数に展開
5 → 101
1 → 001
↓ 順に並べる
0.101001

したがって、0.51(8進数) = 0.101001(2進数)です。

【8進数から10進数への変換】

8進数の小数部分を10進数に変換するには、各桁を分母が 8n の分数に変換して合計します。

例として、8進数の0.5を10進数に変換してみます。

0.5(8進数)
= 5/8¹
= 5/8
= 0.625

したがって、0.5(8進数) = 0.625(10進数)です。

別の例として、8進数の0.51を変換してみます。

0.51(8進数)
= 5/8¹ + 1/8²
= 5/8 + 1/64
= 0.625 + 0.015625
= 0.640625

したがって、0.51(8進数) = 0.640625(10進数)です。

複雑な問題では2進数経由が便利

桁数が多い場合や計算が複雑な場合は、一度2進数に変換してから10進数に変換する方が簡単です。

例として、8進数の0.51を2進数経由で10進数に変換してみます。

0.51(8進数)
↓ まず2進数に変換
0.101001(2進数)
↓ 各桁を分母2のn乗の分数に変換
= 1/2¹ + 1/2³ + 1/2⁶
= 2⁵/64 + 2³/64 + 1/64
= 32/64 + 8/64 + 1/64
= 41/64
= 0.640625

この方法なら、8の累乗を計算する必要がなく、2の累乗だけで済みます。
また、選択肢が分数の場合は、すぐに解答を見つけることができます。

【8進数から16進数への変換】

8進数から16進数への直接的な変換方法を覚えるのは大変なので、2進数を経由する方法が便利です。2進数経由なら、覚えるべき変換パターンが少なくて済みます。

【具体的な手順】

  1. 8進数を2進数に変換する(各桁を3桁に展開)
  2. 2進数を16進数に変換する(4桁ずつグループ化)

例として、8進数の0.51を16進数に変換してみます。

0.51(8進数)
↓ 2進数に変換
0.101001(2進数)
↓ 4桁ずつグループ化(右端に0を追加)
0.1010 0100
↓ 16進数に変換
  A    4

したがって、0.51(8進数) = 0.A4(16進数)です。

2進数経由のメリット

8進数と16進数の間で直接変換する方法を覚えるよりも、一度2進数に変換する方が簡単です。覚えるべきルールは「8進数⇔2進数は3桁」「16進数⇔2進数は4桁」の2つだけで済みます。

16進数から他の進数への変換

2進数への変換は展開を使い、8進数への変換は2進数を経由し、10進数への変換は割り算を使います。

【16進数から2進数への変換】

16進数から2進数への変換は、各桁を4桁の2進数に展開する方法が便利です。16進数の1桁は2進数の4桁に対応します。

【具体的な手順】

  1. 16進数の各桁を4桁の2進数に変換する
  2. 変換した2進数を順に並べる
  3. 不要な先頭の0は省略できる

例として、16進数の0.B4を2進数に変換してみます。

0.B4(16進数)
↓ 各桁を4桁の2進数に展開
B(11) → 1011
4     → 0100
↓ 順に並べる
0.10110100

したがって、0.B4(16進数) = 0.10110100(2進数)です。

【16進数から8進数への変換】

16進数から8進数への直接的な変換方法を覚えるのは大変なので、2進数を経由する方法が便利です。この方法なら、複雑な変換ルールを覚える必要がありません。

【具体的な手順】

  1. 16進数を2進数に変換する(各桁を4桁に展開)
  2. 2進数を8進数に変換する(3桁ずつグループ化)

例として、16進数の0.A4を8進数に変換してみます。

0.A4(16進数)
↓ 2進数に変換
0.10100100(2進数)
↓ 3桁ずつグループ化(右端に0を追加)
0.101 001 000
↓ 8進数に変換
  5   1   0

したがって、0.A4(16進数) = 0.510(8進数)です。

【16進数から10進数への変換】

16進数の小数部分を10進数に変換するには、各桁を分母が 16n の分数に変換して合計します。

例として、16進数の0.Aを10進数に変換してみます。

0.A(16進数)
= 10/16¹
= 10/16
= 0.625

したがって、0.A(16進数) = 0.625(10進数)です。

別の例として、16進数の0.8を10進数に変換してみます。

0.8(16進数)
= 8/16¹
= 8/16
= 0.5

したがって、0.8(16進数) = 0.5(10進数)です。

変換時の注意点

グループ化を使う変換(2進数⇔8進数、2進数⇔16進数)では、小数部分は小数点から右に向かってグループ化します。整数部分とは逆方向なので注意が必要です。また、最後のグループが桁数に満たない場合は、小数部分では右側に0を追加します。

まとめ

進数変換の小数部分では、10進数から他の進数への変換は「掛け算」を使い、他の進数から10進数への変換は各桁を分母が進数のn乗の分数に変換して合計します。8進数と16進数の間の変換は、2進数を経由すると覚えるべきルールが少なくて済むので便利です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?