【基本情報技術者試験】基数変換問題を徹底攻略

## 目次

1. [はじめに](#1-はじめに)
2. [基数変換の基礎知識](#2-基数変換の基礎知識)
3. [2進数から各基数への変換](#3-2進数から各基数への変換)
4. [8進数から各基数への変換](#4-8進数から各基数への変換)
5. [10進数から各基数への変換](#5-10進数から各基数への変換)
6. [16進数から各基数への変換](#6-16進数から各基数への変換)
7. [基数変換における少数の取り扱い](#7-基数変換における少数の取り扱い)
8. [よくある基数変換問題とその解き方](#8-よくある基数変換問題とその解き方)
9. [まとめ](#9-まとめ)

## 1. はじめに

基数変換の問題は、基本情報技術者試験において頻繁に出題されています。本記事では、基数変換の各分野を詳細に解説し、例題と共にその解法を深掘りしていきます。

## 2. 基数変換の基礎知識

**基数変換**とは、ある基数で表現された数値を別の基数で表現し直すことを指します。2進数、8進数、10進数、16進数が一般的に使用されます。それぞれの基数に対して特定の変換ルールが存在します。

## 3. 2進数から各基数への変換

### 2進数から10進数への変換

各ビットの位置に対応する2の累乗を掛け、その総和を計算します。

**例**：2進数の`110101`を10進数に変換する

```
1×2^5 + 1×2^4 + 0×2^3 + 1×2^2 + 0×2^1 + 1×2^0
= 32 + 16 + 0 + 4 + 0 + 1
= 53
```

### 2進数から8進数への変換

2進数を3ビットずつグループに分け、それぞれを8進数に変換します。

**例**：2進数の`110101`を8進数に変換する

1. `110 101`（3ビットずつに分ける）
2. `110 = 6`, `101 = 5`
3. 結果：`65`

### 2進数から16進数への変換

2進数を4ビットずつグループに分け、それぞれを16進数に変換します。

**例**：2進数の`110101`を16進数に変換する

1. `0011 0101`（4ビットずつに分け、前に0を追加して`0011 0101`とする）
2. `0011 = 3`, `0101 = 5`
3. 結果：`35` 

## 4. 8進数から各基数への変換

### 8進数から10進数への変換

各桁に対応する8の累乗を掛け、その総和を計算します。

**例**：8進数の`65`を10進数に変換する

```
6×8^1 + 5×8^0
= 48 + 5
= 53
```

### 8進数から2進数への変換

8進数の各桁を3ビットの2進数に変換します。

**例**：8進数の`65`を2進数に変換する

1. `6 = 110`, `5 = 101`
2. 結果：`110101`

### 8進数から16進数への変換

まず8進数を2進数に変換し、それを16進数に変換します。

**例**：8進数の`65`を16進数に変換する

1. 8進数の`65`を2進数に変換：`110101`
2. 2進数の`110101`を4ビットに分け、前に0を追加して`0011 0101`とする
3. `0011 = 3`, `0101 = 5`
4. 結果：`35`

## 5. 10進数から各基数への変換

### 10進数から2進数への変換

対象の数値を2で割り続け、その商と余りを記録します。

**例**：10進数の`53`を2進数に変換する

1. 53 ÷ 2 = 26 余り 1
2. 26 ÷ 2 = 13 余り 0
3. 13 ÷ 2 = 6 余り 1
4. 6 ÷ 2 = 3 余り 0
5. 3 ÷ 2 = 1 余り 1
6. 1 ÷ 2 = 0 余り 1

余りを逆順に読むと、結果は`110101`

### 10進数から8進数への変換

対象の数値を8で割り続け、その商と余りを記録します。

**例**：10進数の`53`を8進数に変換する

1. 53 ÷ 8 = 6 余り 5
2. 6 ÷ 8 = 0 余り 6

余りを逆順に読むと、結果は`65`

### 10進数から16進数への変換

対象の数値を16で割り続け、その商と余りを記録します。

**例**：10進数の`255`を16進数に変換する

1. 255 ÷ 16 = 15 余り 15 (F)
2. 15 ÷ 16 = 0 余り 15 (F)

余りを逆順に読むと、結果は`FF`

## 6. 16進数から各基数への変換

### 16進数から10進数への変換

各桁に対応する16の累乗を掛け、その総和を計算します。

**例**：16進数の`1A3`を10進数に変換する

```
1×16^2 + A×16^1 + 3×16^0
= 1×256 + 10×16 + 3
= 256 + 160 + 3
= 419
```

### 16進数から2進数への変換

16進数の各桁を4ビットの2進数に変換します。

**例**：16進数の`D5`を2進数に変換する

1. `D = 1101`, `5 = 0101`
2. 結果：`11010101`

### 16進数から8進数への変換

まずそれを10進数に変換し、その後8進数に変換します。

**例**：16進数の`D5`を8進数に変換する

1. 16進数の`D5`を10進数に変換：`213`
2. 10進数の`213`を8進数に変換
4. 結果：`325`

## 7. 基数変換における少数の取り扱い

少数を含む基数変換は、整数部分と少数部分を別々に変換する必要があります。

### 10進数から2進数への変換（少数を含む）

**例**：10進数の`53.625`を2進数に変換する

1. 整数部分：`53`を2進数に変換すると`110101`
2. 少数部分：
    1. 0.625 × 2 = 1.25 → 整数部分は`1`
    2. 0.25 × 2 = 0.5 → 整数部分は`0`
    3. 0.5 × 2 = 1.0 → 整数部分は`1`
    4. 結果として、少数部分は`101`

整数部分と少数部分を組み合わせると、`53.625`の2進数表記は`110101.101`となります。

### 2進数から10進数への変換（少数を含む）

**例**：2進数の`110101.101`を10進数に変換する

1. 整数部分：
    
    ```
    1×2^5 + 1×2^4 + 0×2^3 + 1×2^2 + 0×2^1 + 1×2^0
    = 32 + 16 + 0 + 4 + 0 + 1
    = 53
    ```
    
2. 少数部分：
    
    ```
    1×2^-1 + 0×2^-2 + 1×2^-3
    = 0.5 + 0 + 0.125
    = 0.625
    ```
    

整数部分と少数部分を組み合わせると、`110101.101`の10進数表記は`53.625`となります。

### 10進数から16進数への変換（少数を含む）

**例**：10進数の`123.75`を16進数に変換する

1. 整数部分：`123`を16進数に変換すると`7B`
2. 少数部分：
    1. 0.75 × 16 = 12.0 → 整数部分は`C`
    2. 結果として、少数部分は`C`

整数部分と少数部分を組み合わせると、`123.75`の16進数表記は`7B.C`となります。

### 16進数から10進数への変換（少数を含む）

**例**：16進数の`7B.C`を10進数に変換する

1. 整数部分：
    
    ```css
    7×16^1 + B×16^0
    = 7×16 + 11×1
    = 112 + 11
    = 123
    ```
    
2. 少数部分：
    
    ```mathematica
    C×16^-1
    = 12×(1/16)
    = 12×0.0625
    = 0.75
    ```
    

整数部分と少数部分を組み合わせると、`7B.C`の10進数表記は`123.75`となります。

## 8. よくある基数変換問題とその解き方

### 問題1：2進数の`1101.101`を10進数および8進数に変換してください。

**解法**：

- 10進数：
    1. 整数部分：`1101`を10進数に変換すると`13`
    2. 少数部分：`0.101`を10進数に変換すると`0.625`
    3. 結果は`13.625`
- 8進数：
    1. 2進数の`1101.101`を3ビットずつグループに分ける（`001 101 .101`）
    2. 整数部分：`001 = 1`, `101 = 5`
    3. 少数部分：`101 = 5`
    4. 結果は`15.5`

### 問題2：16進数の`2F3`を2進数および10進数に変換してください。

**解法**：

- 2進数：
    1. `2 = 0010`
    2. `F = 1111`
    3. `3 = 0011`

結果は`001011110011`

- 10進数：
    
    ```
    2×16^2 + F×16^1 + 3×16^0
    = 2×256 + 15×16 + 3
    = 512 + 240 + 3
    = 755
    ```
    

## 9. まとめ 

基数変換は、基本情報技術者試験における重要な計算問題の一つです。

この記事が皆さんの勉強に役立つことを願っています。最後までご覧いただきありがとうございました！