基本情報のパリティチェックを解説!偶数・奇数の計算と誤り検出の限界

青と黄色の表示灯を備えた電子教材と学習机

基本情報のパリティチェックは、ビット列に含まれる「1」の個数で誤りを調べる方法です。偶数パリティなら、追加するパリティビットを含めた1の総数を偶数に、奇数パリティなら奇数にそろえます。ビット列を10進数へ変換する必要はありません。

ただし、単一パリティで分かるのは、検査するひとまとまりのビット列に不整合があるかどうかです。1ビットの反転は必ず検出できますが、2ビットの反転は見逃し、誤った位置の特定や訂正もできません。偶数方式と奇数方式で、この検出能力は変わりません。

この記事では、ビットを付ける計算と受信後の検査を分け、手を動かせる例題で確認します。水平垂直パリティやCRCとの違いまで整理すれば、「1の個数」「誤ったビット数」「誤り訂正」を混同せずに問題を読めるようになります。

この記事のポイント
  • 偶数・奇数の指定から追加するビットを決める手順
  • 送信前のデータと受信した全体で数える範囲の違い
  • 2ビットの反転が検査をすり抜ける具体例
  • 単一パリティ・水平垂直パリティ・CRCの使い分け
無料

基本情報技術者試験 過去問アプリ

本番形式で繰り返し解ける。スキマ時間に1問から

2,000問以上収録
無料で過去問を解く
目次

基本情報のパリティチェックの計算

青と白のコマを一列に並べ、最後の検査用コマを分けた様子
コマを使ったビット列と検査用ビットのイメージ

パリティビットを足す理由

通信では、送った0が1へ、送った1が0へ変わると、受け取った情報の意味が変わります。しかし、受信側は普通、送信前の正しいビット列そのものを手元に持っていません。そのため、受信した列だけを見て誤りを調べられるよう、送信側が検査用の情報を付けます。

その検査用の1ビットがパリティビットです。パリティは「偶奇性」を意味し、ここで調べるのは1の個数が偶数か奇数かです。データの内容をすべて記録した控えではなく、個数の偶奇という小さな情報だけを持たせます。

例えばデータが1011001なら、1は4個です。偶数パリティの約束なら0を足し、10110010として送れます。最後の0も送信するビットですが、1の個数を増やさないので、全体は4個のままです。この記事の計算例では、特に断りがなければパリティビットを右端に追加します。

重要なのは、送信側と受信側が同じ方式・同じ対象範囲で検査することです。送信側が偶数パリティなのに、受信側が奇数を期待すると、誤りがなくても不整合になります。ビットの付加位置や対象範囲も、問題文の指定を先に確かめてください。

偶数・奇数パリティの求め方

二列のコマと色の異なる検査用コマを比較する様子
偶数・奇数の検査条件を比較するイメージ

偶数パリティでは、データとパリティビットを合わせた1の総数を偶数にします。データ内の1がすでに偶数個なら、追加する値は0です。奇数個なら1を追加し、総数を1個増やして偶数にします。「偶数だからビットは0」と固定せず、追加前の個数を見て決めましょう。

奇数パリティでは、完成後の1の総数を奇数にします。データ内の1が偶数個なら1、奇数個なら0を追加します。偶数方式で選んだ値の反対になる、と考えることもできます。

追加前のデータ内の1偶数パリティの追加ビット奇数パリティの追加ビット
偶数個01
奇数個10

データ1100101で試してみます。左から数えると、1は先頭の2個、5桁目、7桁目の合計4個です。偶数パリティなら1100101+0=11001010、奇数パリティなら1100101+1=11001011です。前者の1は4個、後者は5個になり、それぞれ指定に合います。

次にデータ1001011を見ます。1は4個なので、同じく偶数方式は0、奇数方式は1を足します。データ1010010なら1は3個なので、偶数方式は1、奇数方式は0です。0と1が見た目に交互かどうかではなく、1を数えることだけに集中すると安定します。

0個も偶数として扱います。データ0000000に偶数パリティを付けるなら0で、送信列は00000000です。奇数パリティなら1で、00000001になります。「1がないから計算できない」ということはありません。偶数は2で割り切れる個数で、0もその条件を満たします。

末尾に1を加える操作は、数値の足し算ではなくビットの連結です。例えば1010010の右に1を付けた結果は10100101です。2進数としての1010010に数値の1を足す計算とは違います。設問の「パリティビットを付加する」を、算術加算に読み替えないでください。

受信側は全体を数えて判定する

基板上の表示灯をプローブで確認する様子
受信した信号を検査するイメージ

送信前の計算では、パリティビットをまだ付けていないデータから追加値を決めました。受信後の検査では、すでに付いているパリティビットも含めて1を数えます。この範囲の違いが、計算問題で間違いやすいところです。

偶数パリティで受信列11001010を受け取ったとします。1は4個なので、偶数という約束に合っています。ここでの答えは「この検査では誤りを検出しない」です。後半で説明するように、検査に合うことと、送信列が完全に正しいことは同じではありません。

受信列が11000010なら1は3個です。偶数パリティの約束と違うので、誤りを検出します。このとき、受信側は元が11001010だったと知る必要はありません。受信列だけから、満たすべき偶奇に合わないことを判断できます。

奇数パリティなら判定が逆です。受信列11001011には1が5個あるため、検査を通ります。11000011には1が4個あるため、不整合を検出します。求められているのが「追加ビット」か「受信列の検査結果」かを先に区別すると、答える対象がぶれません。

問題文の指定数える範囲答える内容
データにパリティを付加元のデータのみ追加する0または1
パリティ付き受信列を検査パリティビットを含む全体指定の偶奇に合うか
受信データ部と検査ビットが別記両方を合わせる不整合を検出するか

例えば「受信した7ビットのデータが1010010、付属の偶数パリティビットが0」と別々に書かれていても、1を合計する範囲は8ビットです。データ内は3個、検査ビットは0なので総数は3個となり、誤りを検出します。データ部だけを新しく符号化し直し、送られてきた検査ビットを無視する解き方ではありません。

ビット列のどちら端にパリティビットがあるかを変えても、全体の1の個数は変わりません。ただし、データ部分の数値や送信列の16進表現を問われる問題では位置が重要です。検査の偶奇と、データの桁の重みを別々に扱いましょう。

XORと16進数の問題を整理する

パリティは、排他的論理和のXORでも計算できます。XORは、0と0、1と1なら0、0と1、1と0なら1になる演算です。複数のビットを順にXORすると、1が偶数個なら0、奇数個なら1になります。1が現れるたびに結果が反転する、と考えると数え方につながります。

データの全ビットをXORした結果をqとすると、偶数パリティの追加ビットpはqです。完成後はq XOR p=0になります。奇数パリティならpはqの反転で、q XOR p=1です。ここでの0や1は検査条件の表現であり、完成したビット列が数値として0や1になるという意味ではありません。

データ1010010で順に確かめると、1 XOR 0=1、そこへ1をXORして0、次の0と0では0のまま、次の1で1、最後の0でも1です。データ内の1は3個なので、結果1と一致します。偶数パリティではp=1、奇数パリティではp=0と決められます。

XORそのものが不安なら、基本情報の論理演算と真理値表でAND・ORとの違いを確認してください。特にORは1が複数あっても結果が1になるため、パリティの計算をORへ置き換えることはできません。

16進数で受信列が示された場合は、まず各桁を4ビットへ直します。例えばA6はA=1010、6=0110なので10100110です。1は4個ですから、偶数パリティの受信列なら検査に合い、奇数パリティなら不整合になります。A+6を10進数で計算して、その偶奇を見る方法ではありません。

先頭の0は省かれがちですが、問題文でビット長が指定されているなら桁をそろえます。0を補っても1の個数は変わらない一方、データとパリティの位置を見分ける助けになります。7ビットデータの右端に検査ビットを追加して8ビットへする問題では、連結後に4桁ずつ区切って16進数に直しましょう。

計算の練習問題を解いてみる

以下は仕組みを確かめるためのオリジナル練習問題です。公式過去問の転載ではありません。答えを見る前に、方式、数える範囲、1の個数、求められた値の順にメモしてみてください。

練習問題答え確認の理由
データ1011010に偶数パリティを右端へ追加追加値0、送信列10110100データ内の1が4個
データ1110001に奇数パリティを右端へ追加追加値1、送信列11100011データ内の1が4個なので5個へ
偶数パリティの受信列10101001を検査不整合を検出しない全体の1が4個
奇数パリティの受信列10011001を検査不整合を検出する全体の1が4個で偶数
7ビットデータ1010010へ偶数パリティを追加し16進数へ変換A510100101=1010 0101

最初の問題で1を追加したくなった人は、「偶数パリティだから1を付ける」と覚えていないか確認しましょう。2問目は元のデータに1が4個あり、奇数にするために1を足す問題です。同じ追加前の個数でも、指定の方式が変わると追加値は変わります。

3問目と4問目は、どちらも受信列全体の1が4個です。検査条件だけが違うため、答えも変わります。受信列を見て追加するビットを探すのではなく、すでに受信した全体が約束を満たすかを答えます。1の総数が同じ列を並べて解くと、方式と個数を分離して考える練習になります。

最後の問題では、元の7ビットの1が3個なので検査ビットは1です。連結した10100101を1010と0101へ分けるとAと5になります。最初に1010010を16進数へ直してから1を数値として加えると、違う値になってしまいます。ビットの付加を終えてから、指定された表現へ変換する順序を守ってください。

基本情報のパリティチェックの限界

一つと二つの橙色の表示灯を並べて比較した電子教材
一箇所と二箇所の変化を比較するイメージ

奇数個の反転は検出できる

ここからは、検査対象のひとまとまりのビット列で、0と1が入れ替わる「反転」が起きる場合を考えます。方式は単一パリティで、送信側・受信側が同じ約束を使い、ビット列の長さや区切りが保たれていることを前提にします。

1ビットが0から1に変わると、1の個数は1増えます。1から0に変わると、1減ります。どちらでも偶数と奇数が入れ替わります。そのため、偶数で送った列が奇数になった場合も、奇数で送った列が偶数になった場合も、受信側は不整合を検出できます。

反転が3個、5個など奇数個でも、偶奇は最後に反転した状態になります。途中で増えるか減るかは違っても、各反転が偶奇を一度ずつ切り替えるためです。「1ビットの誤りしか検出できない」と限定する説明より、同じ検査単位の奇数個のビット反転を検出すると理解する方が正確です。

一方、反転が2個、4個など偶数個なら、偶奇は元へ戻ります。1の個数が元と同じになる場合だけでなく、2個増える、2個減る場合も、偶奇だけでは区別できません。単一パリティが記録しているのは個数そのものではなく、偶奇だけだからです。

送信列11001010からの変化受信列受信列の1偶数パリティの判定
変化なし110010104個不整合を検出しない
5桁目の1を0へ反転110000103個不整合を検出する
1桁目と5桁目の1を0へ反転010000102個誤りを見逃す
3桁目と4桁目の0を1へ反転111110106個誤りを見逃す
1・2・5桁目の1を0へ反転000000101個不整合を検出する

この表では、誤りのない場合も、2ビット反転した場合も検査に合っています。そのため、「検査に合ったので正しいデータ」とは断定できません。合わなければ誤りあり、合っても検出できない誤りが残るという、一方向の判断になります。

さらに「誤りが偶数個」というときの偶数は、元の列の1の個数ではありません。送信中に反転したビットの個数です。偶数パリティという方式名、送信列の1の個数、反転した位置の個数は、別々の情報として読み取ってください。

2ビットの反転が別々の検査単位に1個ずつ発生した場合は、各単位で1ビット誤りとして検出できます。「通信全体で2ビット誤りなら必ず見逃す」のではなく、「同じ単一パリティの検査範囲内に偶数個の反転があると見逃す」が条件です。パリティビット自体の反転も、この個数へ含めます。

誤り検出と訂正・再送は別の役割

単一パリティは、不整合が起きた場所を特定できません。偶数パリティの受信列1000には1が1個あり、不整合です。しかし、元の列が0000で先頭だけ反転した可能性も、1100で2桁目だけ反転した可能性も、1010や1001だった可能性もあります。どれも、元の列の1は偶数個です。

「どこかに反転がある」と分かっても、正しい列の候補を一つに絞れないため、勝手にどこかのビットを直すことはできません。パリティビットだけを反転させれば偶奇の条件は満たせますが、データ部分の誤りを隠してしまう可能性があります。検査条件に合う列を作ることと、元の情報を復元することは違います。

誤り検出は異常を見つける役割、誤り訂正は正しい内容へ戻す役割です。受信側が送信側にもう一度送ってもらう再送は、さらに別の通信制御です。単一パリティの計算そのものが再送を実行するわけではなく、検出した結果を受けた通信の仕組みが対応します。

再送や通信の信頼性の考え方は、基本情報のTCPとUDPの違いと併せて整理できます。ただし、TCPの検査方式を単一パリティだと読み替えないでください。ここでつなげたいのは、誤りを調べる機能と、再送して届ける機能を分ける視点です。

北海道大学の情報理論教材でも、単一パリティ検査符号は1つの誤りを必ず検出できる一方、訂正はできないと説明されています。検査の種類が変われば能力も変わるので、選択肢では「どの方式についての説明か」を見て判断しましょう。

水平垂直パリティでは位置も使う

コマの表で行と列の交点を指す様子
行と列の交点を調べるイメージ

水平垂直パリティでは、データを表のように並べ、各行と各列の両方向に検査情報を持たせます。単に全体へ1ビットだけ付ける方式より、多くの条件をチェックできるようになります。以下では、各行・各列の1の個数を偶数にした簡単な例で考えます。

位置列A列B列C行の検査ビット
行甲1010
行乙0110
行丙1100
列の検査ビット0000

元の表では、どのデータ行にも1が2個、どのデータ列にも1が2個あります。そのため、右端と下端の検査ビットはすべて0です。右下の0も含めた構成で行・列の偶数条件を確認できます。

ここで行乙・列Bの1が0へ反転したとします。行乙だけ1が1個になり、列Bだけも1が1個になります。両方の検査が不一致になり、その交点である行乙・列Bが候補として分かります。誤りが1ビットだけという前提なら、そのビットを反転させて訂正できます。

ただし、表の四隅を形づくる4ビットが反転すると、各行・各列で反転が2個ずつになって、すべての検査をすり抜ける場合があります。例えば行甲・列A、行甲・列B、行乙・列A、行乙・列Bを反転させるケースです。検査条件を増やしても、あらゆる誤りを無条件に直せるわけではありません。

水平と垂直という名称は、資料のビットの並べ方に注意が必要です。問題の表に対して、どのまとまりに検査ビットを付けるかを確認してください。紙面の縦横だけで暗記するより、各行と各列の両方を検査しているかを見ると理解しやすくなります。

丸文の誤り検出・訂正の技術解説でも、単一の検査から両方向の検査へ拡張する考え方が紹介されています。単一パリティの「訂正できない」という説明と、この方式の「1ビットを訂正できる」という説明を、方式名を省いて混ぜないことが大切です。

CRCやRAIDのパリティとの違い

通信ケーブルと電子基板を置いた机でコマを分けて学習する様子
通信の誤り検出を学習するイメージ

CRCは、Cyclic Redundancy Checkの略で、巡回冗長検査とも呼ばれます。単一パリティのように1の総数の偶奇だけを見るのではなく、ビット列を多項式として扱い、決められた生成多項式で割った余りを検査情報として使います。割り算の途中の演算は、通常の繰り上がり・繰り下がりのある引き算ではなくXORです。

仕組みの小さな例として、データ1101、生成多項式のビット表現1011を使います。1011は3次の多項式なので、データの後ろに0を3個付けた1101000を割ります。左の1に合わせて1011000をXORすると110000、次に101100をXORすると11100、次に10110をXORすると1010、最後に1011をXORして余り001になります。

その余り001をデータの末尾へ付けた送信列は1101001です。この列を1011で同じように割ると余りが0になります。ここでは原理説明用の簡単なCRCを使っており、CRC-16やCRC-32の具体的な実装パラメーターを再現しているわけではありません。

受信側で余りが検査条件に合わなければ、誤りを検出できます。CRCは、近い位置でまとまって起きるバースト誤りの検出に適した方式を設計できます。ただし、検出能力は生成多項式や検査ビット数などの条件で決まり、すべての誤りを絶対に検出するわけではありません。余りが0になってしまう誤りパターンは見逃します。

LINEEYEの通信基本用語「誤り制御」で、パリティ方式とCRC方式の違いを確認できます。基本情報の選択肢では、1の個数ならパリティ、多項式の余りならCRC、と計算の材料から方式を見分けるのが実用的です。

方式検査の材料区別したいポイント
単一パリティ対象列の1の個数の偶奇奇数個の反転を検出、位置は特定しない
水平垂直パリティ行と列の検査結果1ビット誤りの前提で交点を特定できる
CRC生成多項式で割った余り検出能力は多項式などの条件による

RAIDの記事でもパリティという言葉が出ますが、想定する問題が違います。通信の単一パリティでは、どのビットが誤ったか分からないまま検査します。一方、ディスクの故障で「どの装置の情報が失われたか」が分かる場合は、残った情報とパリティから、失われた情報を求められることがあります。

簡単なXORの式A XOR B XOR C=Pでは、A・B・Pが既知で、Cだけ失われたと分かれば、C=A XOR B XOR Pで求められます。未知の場所があらかじめ分かる問題と、場所が分からないビット反転の問題の違いです。ディスク容量やRAIDレベルの比較は、基本情報のRAIDの仕組みと違いへ分けて学習してください。

基本情報のパリティチェックのまとめ

問題を解くときは、まず単一パリティの問題か、行と列を使う問題か、CRCの問題かを確認します。単一パリティなら、送信前はデータ内の1を数えて追加する値を選び、受信後はパリティビットを含む全体の1を数えて指定の偶奇と照合します。

検出能力を聞かれたら、「同じ検査単位の反転数」を見るのが次の手順です。1・3・5個の反転は偶奇を変え、2・4個の反転は偶奇を保ちます。単一パリティは誤りの位置を特定しないため、検出と訂正を同じ意味で答えないようにしましょう。

最後に次の確認問題を、短い言葉で説明してみてください。「偶数パリティでデータ内の1が5個なら、追加値は何か」は1です。「パリティビットだけが反転しても検出できるか」は、他に反転がなければ検出できます。「検査に合う列なら誤りは絶対にないか」は、偶数個の反転を見逃すため断定できません。

もう一つ、「偶数方式より奇数方式の方が、1ビット誤りに強いか」の答えは、検出能力は同じです。どちらも1ビット反転で約束の偶奇が変わります。「水平垂直パリティなら、誤り数の前提なしで必ず交点を直してよいか」の答えは、いいえです。複数の誤りでは検査結果の解釈が変わるため、問題の条件を確認する必要があります。

計算が苦手なら、追加するビット、受信列の検査、誤り数と能力という3種類を混ぜずに練習すると、どこでつまずいたかを見つけやすくなります。答えを覚えるだけでなく、「数えた範囲はどこか」「期待する偶奇はどちらか」を一行で書ける状態を目指しましょう。

計算方法が分かったら、基本情報の過去問アプリで無料演習し、実際の選択肢で理解を確認できます。まだ追加ビットの求め方が不安な段階なら、先にこの記事の表と練習問題を解き直してから進むと、誤答の理由を追いやすくなります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次