---
title: "ハミング符号方式とは？1ビット誤りを訂正できる考え方【基本情報技術者試験】"
description: "ハミング符号方式を「検査ビットを追加して1ビット誤りを検出・訂正する方式」として整理し、CRC方式、パリティチェック方式、チェックサム方式との違いをFE試験向けに解説します。"
last_modified_at: "2026-07-25"
canonical_url: "https://stemtazoo.github.io/fe/hamming-code/"
section: "fe"
---

## まず結論

ハミング符号方式とは、**データに検査ビットを追加して、1ビットの誤りを検出し、訂正できる方式**です。

基本情報技術者試験では、ハミング符号方式は **1ビット誤りを訂正できる** というキーワードで判断しやすいです。

CRC方式やパリティチェック方式は主に誤りを「検出」する方式ですが、ハミング符号方式は **誤りの位置を特定して訂正できる** 点が大きな違いです。

## 直感的な説明

ハミング符号方式は、**データに見守り役を何人か付けて送る**イメージです。

普通にデータだけを送ると、途中で1ビットだけ変わっても、どこが変わったのか分かりにくいです。

そこで、ハミング符号方式では、データにいくつかの **検査ビット** を追加します。

検査ビットは、データの一部をそれぞれ見張っています。

受信側では、検査ビットの結果を組み合わせて、

- 誤りがあるか
- どの位置のビットが誤っているか

を判断します。

誤った位置が分かれば、そのビットを 0 から 1、または 1 から 0 に反転して訂正できます。

## 定義・仕組み

ハミング符号方式は、データビットに検査ビットを追加し、受信側で誤りの位置を特定できるようにする方式です。

FE試験では、細かい計算よりも、次の対応を押さえることが大切です。

| 用語 | ハミング符号方式での意味 |
|---|---|
| データビット | 本来送りたい情報 |
| 検査ビット | 誤りを見つけるために追加するビット |
| 誤り検出 | データに誤りがあることを見つける |
| 誤り訂正 | 誤ったビットの位置を特定して直す |
| 1ビット誤り | ハミング符号方式で訂正できる代表的な誤り |

ハミング符号方式では、複数の検査ビットが、それぞれ決まった位置のビットを確認します。

受信側で検査結果に矛盾が出ると、その組合せから誤り位置を推定します。

例えば、あるビットが 0 のはずなのに 1 になっている場合、誤り位置が分かれば、そのビットを反転して元に戻せます。

このテーマは、基本情報技術者試験の「ネットワーク」や「データ伝送の誤り制御」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、ハミング符号方式はCRC方式やパリティチェック方式と並べて出題されやすいです。

判断するときは、**誤りを検出するだけか、訂正までできるか** を見ます。

| キーワード | 判断 |
|---|---|
| 1ビット誤りを訂正 | ハミング符号方式 |
| 誤り位置を特定 | ハミング符号方式 |
| 検査ビットを追加 | ハミング符号方式で出やすい |
| 生成多項式 | CRC方式 |
| 割った余り | CRC方式 |
| パリティビット | パリティチェック方式 |
| 合計値・総和 | チェックサム方式 |

例えば、次のような説明はハミング符号方式です。

```text
データに検査ビットを付加し，受信側で誤り位置を特定して，
1ビットの誤りを訂正する。
```

この説明では、**1ビットの誤りを訂正する** という点が決め手です。

一方で、次のような説明はCRC方式です。

```text
送信データを生成多項式で割った余りを付加し，
受信側で同じ生成多項式を使って誤りを検出する。
```

この説明では、**生成多項式** と **余り** が出ています。

科目Aでは、**訂正までできるならハミング符号、生成多項式ならCRC** と考えると選択肢を切りやすいです。

## どんな場面で使う？

誤り制御の説明を読むときは、ハミング符号方式が誤りの検出だけでなく訂正まで行える点を確認します。

大切なのは、次の流れです。

```text
送信側：
データビットに検査ビットを追加する

受信側：
検査ビットを使って誤りの有無を調べる
誤り位置が分かれば、そのビットを反転して訂正する
```

例えば、1ビットだけ誤っている場合を考えます。

```text
本来のデータ：1011
受信したデータ：1001
```

この例では、途中の1ビットが変わっています。

ハミング符号方式では、検査ビットの結果から、どの位置が誤っているかを推定します。  
誤り位置が分かれば、そのビットを反転して元に戻せます。

問題文で通信やビット列の問題を読むときは、次の順で整理すると分かりやすいです。

1. 追加されているビットが何のためかを見る
2. 誤りを検出するだけか、訂正まで行うかを見る
3. 誤り位置を特定する説明があるかを見る
4. 1ビット誤りの訂正ならハミング符号方式を疑う

ハミング符号方式は、計算手順を深掘りしすぎるより、**検査ビットで誤り位置を見つけ、1ビット誤りを訂正する** という流れを押さえるのが実用的です。

## よくある誤解・混同

ハミング符号方式で混同しやすいのは、CRC方式、パリティチェック方式、チェックサム方式です。

| 方式 | 主な目的 | 判断の合図 |
|---|---|---|
| ハミング符号方式 | 誤り検出と訂正 | 1ビット誤りの訂正、誤り位置の特定、検査ビット |
| CRC方式 | 誤り検出 | 生成多項式、余り、巡回冗長検査 |
| パリティチェック方式 | 誤り検出 | パリティビット、偶数・奇数、水平方向・垂直方向 |
| チェックサム方式 | 誤り検出 | 合計値、総和、補数 |

CRC方式は、生成多項式で割った余りを付加して誤りを検出する方式です。  
CRC方式は誤り検出が中心であり、ハミング符号方式のように1ビット誤りを訂正する方式としては扱いません。

パリティチェック方式は、1の個数が偶数か奇数かを確認する考え方です。  
単純なパリティチェックでは、誤りの有無は分かっても、どのビットが誤っているかまでは分かりにくいです。

チェックサム方式は、データを一定の単位で合計し、その値を検査用データとして使う方式です。  
説明文に **合計値** や **総和** が出てきたら、ハミング符号方式ではなくチェックサム方式を疑います。

FE試験では、次のように切り分けます。

- 1ビット誤りを訂正するなら、ハミング符号方式
- 生成多項式で割るなら、CRC方式
- パリティビットなら、パリティチェック方式
- 合計値や総和なら、チェックサム方式

## さらに注意したいひっかけ

ハミング符号方式では、次のようなひっかけにも注意します。

| ひっかけ表現 | なぜ注意する？ |
|---|---|
| 生成多項式で割る | CRC方式の説明 |
| 合計値を付加する | チェックサム方式の説明 |
| パリティビットだけで1の個数を見る | パリティチェック方式の説明 |
| すべての複数ビット誤りを自動訂正する | FEでは「1ビット誤りの訂正」を基本に押さえる |
| データを暗号化する | ハミング符号方式は誤り制御であり、暗号化ではない |
| データを圧縮する | ハミング符号方式はデータ量を減らす方式ではない |

特に、**ハミング符号方式は暗号化でも圧縮でもない** という点は押さえておくと安心です。

ハミング符号方式は、通信中にビットが変わったときに、その誤りを見つけて直すための仕組みです。  
データの内容を秘密にする仕組みではありません。

また、ハミング符号方式を「どんな誤りでも直せる」と考えるのも危険です。  
FE試験では、まず **1ビット誤りを訂正できる方式** として整理します。

## まとめ（試験直前用）

- ハミング符号方式は、検査ビットを追加して誤りを検出・訂正する方式
- 「1ビット誤りを訂正」「誤り位置を特定」が出たらハミング符号方式を疑う
- 生成多項式が出たらCRC方式を疑う
- パリティビットが出たらパリティチェック方式を疑う
- 合計値や総和が出たらチェックサム方式を疑う
- ハミング符号方式は、暗号化や圧縮ではなく、誤り制御の方式

## 関連記事

誤り制御方式は、似た用語を並べて切り分けると覚えやすくなります。

- [CRC方式とは？生成多項式で誤りを検出する方法](https://stemtazoo.github.io/fe/crc/)
- [チェックサム方式とは？合計値で誤りを検出する方法](https://stemtazoo.github.io/fe/checksum/)
