まずは過去問を見てみよう
過去問①:10進数から2進数への変換
平成16年度 春期 基本情報技術者試験 午前 問1

過去問②:16進小数から10進数への変換
平成19年度 秋期 基本情報技術者試験 午前 問1

過去問③:有限小数の判定
平成17年度 秋期 基本情報技術者試験 午前 問1

過去問④:2進数で最大値を求める
平成18年度 秋期 基本情報技術者試験 午前 問1

この問題を解くために必要なキーワード
今回の過去問を解くために必要なのは、次の4つです。
この4つを理解すれば、冒頭の過去問を解けるようになります。
1. n進数と位取り
n進数とは?
n進数とは、n種類の数字を使って数を表す方法です。
| 進数 | 使用する数字 | 桁が上がるタイミング |
|---|---|---|
| 2進数 | 0、1 | 2になったとき |
| 8進数 | 0~7 | 8になったとき |
| 10進数 | 0~9 | 10になったとき |
| 16進数 | 0~9、A~F | 16になったとき |
16進数では、10~15をA~Fで表します。
| 10進数 | 16進数 |
|---|---|
| 10 | A |
| 11 | B |
| 12 | C |
| 13 | D |
| 14 | E |
| 15 | F |
位取りとは?
位取りとは、数字が置かれている桁によって、その数字の価値が変わる仕組みです。
例えば、10進数の123は次のように分解できます。
123 = 1 × 100 + 2 × 10 + 3 × 1
これを累乗で表すと、
123 = 1 × 10² + 2 × 10¹ + 3 × 10⁰
となります。
2進数でも同じ考え方です。
| 桁 | 4桁目 | 3桁目 | 2桁目 | 1桁目 |
|---|---|---|---|---|
| 2進数の重み | 8 | 4 | 2 | 1 |
| 10進数の重み | 1000 | 100 | 10 | 1 |
| 16進数の重み | 4096 | 256 | 16 | 1 |
つまり、n進数では、右から順番にn⁰、n¹、n²、n³…という重みが付きます。
※累乗が分からない場合は、別記事「累乗とは?」を参照してください。
小数点以下の位取り
小数点以下では、桁が右に進むほど重みが小さくなります。
| 小数点以下 | 1桁目 | 2桁目 | 3桁目 | 4桁目 |
|---|---|---|---|---|
| 2進数 | 1/2 | 1/4 | 1/8 | 1/16 |
| 10進数 | 1/10 | 1/100 | 1/1000 | 1/10000 |
| 16進数 | 1/16 | 1/256 | 1/4096 | 1/65536 |
試験で覚えるポイント
- 整数部分:左に進むほど重みがn倍になる
- 小数部分:右に進むほど重みが1/n倍になる
- n進数の各桁の重みはnの累乗で表せる
2. 基数変換
基数変換とは、数値を別の進数で表すことです。
試験では、主に次の4パターンが出題されます。
- n進数の整数 → 10進数
- 10進数の整数 → n進数
- n進数の小数 → 10進数
- 10進数の小数 → n進数
n進数の整数を10進数に変換する
各桁の数字に重みを掛けて足します。
例えば、2進数の1011は、
1011 = 1 × 8 + 0 × 4 + 1 × 2 + 1 × 1
= 8 + 2 + 1
= 11(10進数)
となります。
16進数の2Aなら、
2 × 16 + 10 × 1
= 42(10進数)
です。
10進数の整数をn進数に変換する
変換したい進数の基数で割り続け、余りを下から読みます。
例えば、10進数の13を2進数に変換します。
| 計算 | 商 | 余り |
|---|---|---|
| 13 ÷ 2 | 6 | 1 |
| 6 ÷ 2 | 3 | 0 |
| 3 ÷ 2 | 1 | 1 |
| 1 ÷ 2 | 0 | 1 |
余りを下から読むと1101です。
したがって、
13(10進数)= 1101(2進数)
となります。
8進数なら8で、16進数なら16で割り続けます。
n進数の小数を10進数に変換する
小数点以下の各桁に重みを掛けて足します。
例えば、2進数の0.101は、
1 × 1/2 + 0 × 1/4 + 1 × 1/8
= 0.5 + 0.125
= 0.625(10進数)
となります。
16進数の0.Cなら、Cは12なので、
12 × 1/16
= 0.75(10進数)
です。
整数部分と小数部分が混在する場合も同じです。
例えば、16進数の3A.5Cは、
3 × 16 + 10 × 1 + 5 × 1/16 + 12 × 1/256
= 58 + 5/16 + 12/256
= 3735/64(10進数)
となります。
10進数の小数をn進数に変換する
変換したい進数の基数を掛け続け、整数部分を上から読みます。
例えば、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進数)
となります。
小数部分が0になれば変換は終了です。0にならずに続く場合は、必要な桁数まで計算します。
2進数と8進数・16進数の変換
2進数と8進数・16進数は、桁をまとめることで簡単に変換できます。
- 2進数3桁 = 8進数1桁
- 2進数4桁 = 16進数1桁
例えば、
10101100(2進数)
を4桁ずつ区切ると、
1010|1100
となります。
1010は16進数のA、1100は16進数のCなので、
10101100(2進数)= AC(16進数)
です。
整数部分は小数点から左に、小数部分は小数点から右に区切ります。桁数が足りない場合は、値が変わらないように0を補います。
試験で覚えるポイント
| 変換 | 方法 |
|---|---|
| n進数 → 10進数 | 各桁の重みを掛けて足す |
| 10進数の整数 → n進数 | nで割り、余りを下から読む |
| 10進数の小数 → n進数 | nを掛け、整数部分を上から読む |
| 2進数 → 8進数 | 3桁ずつ区切る |
| 2進数 → 16進数 | 4桁ずつ区切る |
3. 有限小数と無限小数
有限小数とは?
有限小数とは、小数点以下が途中で終わる数です。
例えば、10進数の0.5や0.125は有限小数です。
一方、1/3を10進数で表すと、
0.333333…
となり、終わりません。これを無限小数といいます。
有限小数になる条件
分数を約分したとき、分母の素因数が、基数の素因数だけで構成されていれば有限小数になります。
試験では次の表を覚えておきましょう。
| 進数 | 有限小数になる条件(約分後の分母) |
|---|---|
| 2進数 | 素因数が2だけ |
| 8進数 | 素因数が2だけ |
| 10進数 | 素因数が2と5だけ |
| 16進数 | 素因数が2だけ |
例えば、0.125は1/8です。
8 = 2³なので、2進数でも有限小数になります。
一方、0.05は1/20です。
20 = 2² × 5
分母に5が含まれているため、2進数では有限小数になりません。
※素因数分解が分からない場合は、別記事「素因数分解とは?」を参照してください。
試験で覚えるポイント
- 2進数・8進数・16進数では、約分後の分母に2以外の素因数があると無限小数になる
- 10進数では、約分後の分母の素因数が2と5だけなら有限小数になる
- 10進数で有限小数でも、2進数では無限小数になることがある
- 2進数で有限小数なら、10進数でも有限小数になる
4. ビットと桁の重み
ビットとは?
ビットとは、0または1のどちらかを表す情報の単位です。
1バイトは8ビットです。
例えば、次の8ビットを考えます。
10110010
各桁の重みは次のとおりです。
| ビット | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 重み | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1の桁だけを足すと、
128 + 32 + 16 + 2 = 178
となります。
最大値を求めるには?
2進数で最大値を求めるときは、重みの大きい左側の桁から1を配置します。
例えば、8ビットのうち、1が4個、0が4個という条件で最大値を求める場合、
11110000
と並べます。
128 + 64 + 32 + 16 = 240
したがって、最大値は240です。
試験で覚えるポイント
- 1バイト = 8ビット
- 符号なし2進数では、左側の桁ほど重みが大きい
- 1の個数が決まっている場合、左側から1を並べると最大値になる
過去問の正解と解説
冒頭の4問を解いてみましょう。
過去問①:10進数から2進数への変換
平成16年度 春期 午前 問1

正解・解説
正解:ウ(0.00111)
7/32を2進数に変換します。
32 = 2⁵なので、
7/32 = 4/32 + 2/32 + 1/32
= 1/8 + 1/16 + 1/32
= 2⁻³ + 2⁻⁴ + 2⁻⁵
となります。
小数点以下の3桁目、4桁目、5桁目が1になるので、
0.00111
が正解です。
この問題は「小数点以下の位取り」を理解していれば解けます。
過去問②:16進小数から10進数への変換
平成19年度 秋期 午前 問1

正解・解説
正解:ウ(0.75)
16進数の0.Cを10進数に変換します。
Cは10進数の12です。
12 × 1/16 = 0.75
したがって、
0.75
が正解です。
この問題は「16進数の数字」と「小数点以下の位取り」を理解していれば解けます。
過去問③:有限小数の判定
平成17年度 秋期 午前 問1

正解・解説
正解:ウ(0.5)
各選択肢を分数に直します。
| 選択肢 | 小数 | 約分した分数 |
|---|---|---|
| ア | 0.3 | 3/10 |
| イ | 0.4 | 2/5 |
| ウ | 0.5 | 1/2 |
| エ | 0.8 | 4/5 |
8進数で有限小数になるには、約分後の分母の素因数が2だけである必要があります。
該当するのは1/2だけです。
したがって、
ウ(0.5)
が正解です。
この問題は「有限小数になる条件」を覚えていれば解けます。
過去問④:2進数で最大値を求める
平成18年度 秋期 午前 問1

正解・解説
正解:エ(240)
1バイトは8ビットです。
0と1の個数が同じなので、それぞれ4個ずつ使用します。
最大値にするには、重みの大きい左側から1を並べます。
11110000
これを10進数に変換すると、
128 + 64 + 32 + 16 = 240
したがって、
エ(240)
が正解です。
この問題は「ビットと桁の重み」を理解していれば解けます。
まとめ
2進数と基数変換の問題では、次の4つを押さえましょう。
| キーワード | 覚えること |
|---|---|
| n進数と位取り | 各桁の重みはnの累乗 |
| 基数変換 | 整数は割り算、小数は掛け算で変換 |
| 有限小数と無限小数 | 約分後の分母の素因数で判定 |
| ビットと桁の重み | 左側ほど重みが大きく、1を左に並べると最大値になる |
この4つを理解して、冒頭の過去問が解けるようになれば、このテーマの学習はひとまず完了です。
次は「2進数の計算」に進みましょう。
出典
本記事の過去問は、独立行政法人情報処理推進機構(IPA)が公開した基本情報技術者試験の問題を参考にしています。
- 平成16年度 春期 基本情報技術者試験 午前 問1
- 平成19年度 秋期 基本情報技術者試験 午前 問1
- 平成17年度 秋期 基本情報技術者試験 午前 問1
- 平成18年度 秋期 基本情報技術者試験 午前 問1
IPA公式過去問題一覧:https://www.ipa.go.jp/shiken/mondai-kaiotu/
※上記4年度の公式問題PDF・解答PDFへの直接リンクは未確認のため、公開前に追加すること。

