パリティチェック(parity check)
1ビットを足して、1の個数を偶数か奇数にそろえる誤り検出。ずれていれば途中で化けたと分かる。
もう少し詳しい説明
パリティチェックは、データに1ビットだけ足して、1の個数をそろえておくやり方です。届いた側で数え直して、そろっていなければ途中で化けたと分かります。
足す1ビットをパリティビットと呼びます。
偶数パリティと奇数パリティ
そろえ方は2通りあります。どちらを使うかは、送る側と受け取る側で先に決めておきます。
- 偶数パリティ … パリティビットを含めた1の個数が偶数になるようにする
- 奇数パリティ … 同じく奇数になるようにする
上の図は偶数パリティです。データ 1011001 には1が4個ありますが、これはすでに偶数なので、パリティビットは 0 になります。もし1が3個(奇数)だったら、パリティビットは 1 にして偶数にそろえます。
足す1ビットの値を決めるだけで、計算らしい計算はありません。
なぜ1ビット足すのか
ここで、「足さなくてもいいのでは」という疑問が出てきます。送る前のデータの1の個数は数えれば分かるのだから、何も足さずに送って、届いたときに個数が合わなければ化けたと判断すればよい、という考え方です。
成り立たないのは、受け取る側が、送り主の送ろうとした元のデータを知らないからです。知っているなら、そもそも送る必要がありません。
届いた 1001001 を見ても、これが正しく届いたものなのか、1ビット化けた結果なのかを決める手がかりがありません。何個であるべきだったのかを、受け取る側は知らないのです。
パリティビットの役目は、データの中身を変えることではありません。どんなデータが来ても「全体の1の個数は偶数」という決まった形にそろえてから送り出すことです。形が先に決まっていれば、受け取る側は元のデータを知らなくても、数えて決まりどおりかを見るだけで済みます。
奇数と偶数を切り替えれば、1ビット浮くのでは
もう一歩進んだ疑問です。データがすでに奇数個なら奇数パリティ、偶数個なら偶数パリティと、そのつど都合のよいほうを選べば、何も足さずに済むように見えます。
実際には、この方式は使われません。理由は3つです。
1. 送る量が減らない
どちらで見てほしいかを、受け取る側に伝えなければなりません。その連絡に、結局1ビット要ります。足す場所がデータの後ろから手前へ移っただけで、送る量は変わりません。
2. 1回ずれると、その先がすべて狂う
連絡を省いて「1回目は奇数、2回目は偶数…」と先に決めておく手もあります。ただしこの形は、送った回数を両側で数え続けているのと同じです。
連絡がノイズで化けたり、データが1回分まるごと届かなかったりすると、送る側と受け取る側で回数がずれます。ずれた後は、正しく届いたデータまで全部エラーと判定されます。1回の事故が、その先ずっと尾を引く形です。
毎回そのデータだけで判定が完結する1ビットを付けるほうが、はるかに安全です。
3. 回路が複雑になる
ルールが固定なら、1の個数を数えて偶奇を見るだけの回路で済みます。切り替えがあると「いま何回目か」を覚えておく必要が出てきます。
誤り検出は通信のたびに行われるので、この部分が単純で速いことの価値は大きいのです。
ルールを送る側と受け取る側でずっと固定し、データごとに調整用の1ビットを付ける。単純だからこそ、速くて壊れにくいというのが、この方式が使われ続けている理由です。
見つけられる誤りと、見つけられない誤り
ここが試験で問われる中心です。
1ビット化けると、1の個数が必ず1つ増えるか減ります。つまり偶奇がひっくり返るので、数え直せば分かります。
ところが2ビット化けると、偶奇が元に戻ります。図の例で3ビット目に加えて5ビット目も化けたとすると、1の個数は4個のまま。受け取った側からは、正しく届いたようにしか見えません。
- 検出できる … 1ビット、3ビット、5ビット…(奇数個が化けたとき)
- 見逃す … 2ビット、4ビット…(偶数個が化けたとき)
偶数パリティでも奇数パリティでも、ここは同じ
どちらのパリティを使っていても、検出できるのは奇数個の誤りです。
理由は、1ビット化けるたびに偶奇がひっくり返ることにあります。奇数回ひっくり返れば、決めておいた形と違う状態になります。偶数回ひっくり返れば、元の形に戻ってしまいます。ひっくり返った回数だけで決まるので、そろえる形が偶数なのか奇数なのかは関係ありません。
奇数パリティで確かめます。1の個数を奇数(たとえば3個)にそろえて送ったとします。
| 化けたビット数 | 1の個数 | 奇数か | 判定 |
|---|---|---|---|
| 0個(無事) | 3個 | 奇数 | 正しく届いた |
| 1個 | 2個または4個 | 偶数 | 誤りと分かる |
| 2個 | 1個・3個・5個のどれか | 奇数 | 見逃す |
偶数パリティのときと、まったく同じ結果になります。
名前が似ているので、ここは取り違えやすいところです。
| 言葉 | 何を数えているか |
|---|---|
| 偶数パリティ・奇数パリティ | そろえる形。送るときに1の個数をどちらにするか |
| 偶数個の誤り・奇数個の誤り | 化けたビットの数。届くまでに何ビット壊れたか |
別のものを数えています。 「偶数パリティだから偶数個の誤りを見つける」という関係ではありません。
直すことはできない
パリティで分かるのは「どこかがおかしい」ということだけです。どのビットが化けたかは分かりません。
数えた結果が合わなくても、1ビット目が怪しいのか7ビット目が怪しいのかを区別する手がかりが無いためです。そのため、できるのは送り直してもらうことだけになります。
ここを一歩進めて「どのビットが化けたか」まで突き止め、その場で直せるようにしたのがハミング符号です。
縦にも数えて位置を絞る
複数のデータをまとめて送るときに、横方向だけでなく縦方向にもパリティを付けるやり方があります。水平垂直パリティと呼びます。
データを縦横の表の形に並べ、右の列に横方向のパリティ、下の行に縦方向のパリティを付けます。どちらも、その並びの1の個数が偶数になるように決めるだけで、やっていることは1ビットのパリティと同じです。
1ビットだけ化けた場合、横のどの行がおかしいかと、縦のどの列がおかしいかが同時に分かります。図では2行目と3列目だけが合いません。合わないのが1行と1列だけなら、その交点のマス以外にありえません。
位置が決まれば、あとは0と1を入れ替えるだけです。パリティだけで訂正までできるのは、この形にしたときです。
縦横に数えるぶん、付けるビットは増えます。誤りをどこまで扱いたいかと、増えるビットの量は引き換えです。
何に使われているのか
古くはシリアル通信(データを1ビットずつ順番に送る通信)やメモリ(主記憶ともいいます。いま実行中のプログラムとデータを置いておく記憶装置)で広く使われていました。いまもメモリのECC(Error Correcting Code。誤り訂正機能付きメモリ)や、RAID(Redundant Arrays of Inexpensive Disks。複数のディスクを束ねて、速さや壊れにくさを高める技術)の5番・6番のパリティなど、考え方としては現役です。
RAIDのパリティは「1台のディスクが壊れても、残りとパリティから計算し直せる」という使い方で、足りない1つを復元するという点がパリティビットそのものです。
試験ではこう出る
科目A(旧・午前)で出ます。いちばん多いのは、パリティチェックで検出できる誤り・できない誤りを選ばせる問題です。「2ビットの誤りは検出できない」が答えになる形がくり返し出ます。
次に多いのが、具体的なビット列を見せてパリティビットの値を答えさせる形。偶数パリティか奇数パリティかを読み落とさなければ、1の個数を数えるだけです。
検出はできるが訂正はできない、という線引きも問われます。訂正まで求められていたらハミング符号やECCの話なので、言葉が出てきたら切り替えてください。
関連する用語
- ハミング符号
- 検査ビットを複数置いて、誤りを見つけるだけでなく、どのビットかまで特定して直す
- チェックディジット
- 数字の並びの末尾に付ける検査用の1桁。考え方はパリティと同じ
- CRC
- 割り算の余りを検査に使う方式。パリティより見逃しが少なく、通信でよく使われる
- RAID
- ディスクを束ねる技術。RAID5などはパリティを持たせて、1台壊れても復元できるようにしている
ミニクイズ
8ビットのデータに偶数パリティの1ビットを付けて送った。受信側で検出できないのはどれか。
正解は 1番:2ビットが同時に化けた
パリティが見ているのは1の個数が偶数か奇数かだけです。1ビット化けると個数の偶奇が必ず変わるので、データ側でもパリティビット側でも検出できます。ところが2ビット化けると偶奇が元に戻ってしまい、正しく届いたように見えます。つまりパリティチェックで確実に見つけられるのは、奇数個のビットが化けたときだけです。この「2ビットは見逃す」という弱点が、そのまま出題されます。
この分野をまとめて解く → 基礎理論と情報メディアのミニテスト(全39問)
最終更新:2026-10-06