1の個数が奇数になるよう検査ビットを付加するパリティ方式
奇数パリティ(odd parity)とは、データとパリティビット(=検査用に付け足す1ビット)を合わせた 1の個数が必ず奇数になるようにパリティビットを決める方式です。偶数パリティの「偶数」を「奇数」に置き換えただけの、もう一つの流儀です。
身近な例で言うと、当番を必ず奇数人にしておくルールに似ています。「いつも奇数人いるはず」と決めておけば、人数が偶数になっていたら「誰か抜けた or 増えた」とすぐ気づけます。奇数パリティも同じで、「1は必ず奇数個」という約束が崩れていたら誤りと判断します。
上のツールでデータビットをクリックすると、1の個数が奇数になるようパリティビット(P)がリアルタイムに決まります。データの1が偶数個ならP=1、奇数個ならP=0になる様子を確認してください。
奇数パリティビットの決め方は、次のように考えられます。どれも同じ結果になります。
・個数で考える:データの1が偶数個ならP=1、奇数個ならP=0
・偶数パリティから考える:偶数パリティビットを反転(NOT)した値がそのままP
・回路で考える:全ビットのXOR結果を反転(XNOR)したものがP
計算例として 1100110 を見てみましょう。1の個数は4個(偶数)です。全体を奇数にしたいので、もう1つ1を足してP=1。送信フレームは 11001101 となり、全体の1は5個=奇数になります。逆にデータが 1011001(1が4個…ではなく実際は4個)のように奇数個ならP=0で奇数を維持します。
ポイントは 「偶数パリティビットの逆」という関係です。同じデータに対して、偶数パリティではP=0なら奇数パリティではP=1、というようにちょうど反対になります。覚えるときは「偶数パリティを計算してから反転するだけ」と考えると楽です。
偶数パリティと奇数パリティは「全体の1を偶数にするか奇数にするか」だけが違い、誤り検出の能力(1ビット誤りを検出、偶数個の誤りは見逃す)は同じです。とはいえ実用上の細かな差があります。
| 項目 | 偶数パリティ | 奇数パリティ |
|---|---|---|
| 全体の1の数 | 偶数にする | 奇数にする |
| データが全0のとき | P=0(全ビット0) | P=1(必ず1が立つ) |
| 検出能力 | 奇数個の誤りを検出 | 奇数個の誤りを検出(同じ) |
奇数パリティの強みは 「データが全部0でも必ずどこかに1が立つ」点です。通信路が断線して何も信号が来ない(=全0が届く)状態を、偶数パリティでは「正常な全0」と区別できませんが、奇数パリティなら「1が0個=偶数だから異常」と気づけます。上のツールでデータを全0にして両方式を比べると違いが実感できます。