通信におけるパリティチェックの採用状況と、それぞれの選択理由について解説します。
こんにちは。ゆうせいです。
新人研修中に受講者から以下の質問をいただきました。
通信で使われているのは偶数パリティですか?奇数パリティですか?またその理由は?
今回はこの質問に答えたいと思います。
通信プロトコルやシステムによって異なりますが、一般的には「偶数パリティ」と「奇数パリティ」の両方が用途に応じて使い分けられています。
パリティチェックの仕組み
パリティチェックとは、データ転送中の誤り(ビット反転)を検出するための最もシンプルな手法です。送信するデータ(通常は7ビットや8ビット)に「パリティビット」という1ビットを付け加え、データ全体の中にある「1」の個数を調整します。
高校の出席確認に例えるとわかりやすくなります。
「クラス内にいる生徒の数(1の数)が、常に偶数(または奇数)になるように、予備の生徒(パリティビット)が出入りして調整する」というルールを決めておきます。もし確認したときにそのルールが破られていれば、「誰かが勝手に入れ替わった(エラーが起きた)」と判断できる仕組みです。
偶数パリティと奇数パリティの違い
偶数パリティ(Even Parity)
データ内の「1」の個数とパリティビットを合計したとき、その総数が偶数になるように調整する方法です。
- メリット:理論的にシンプルで、コンピュータの計算と相性が良い。
- デメリット:すべてのビットが「0」の場合、パリティビットも「0」となり、データが全く流れていない状態(全ビット0)とデータの区別がつきにくい。
奇数パリティ(Odd Parity)
データ内の「1」の個数とパリティビットを合計したとき、その総数が奇数になるように調整する方法です。
- メリット:データがすべて「0」であっても、パリティビットが必ず「1」になるため、信号が途絶えているのか、データとして「0」が送られているのかを判別できる。
- デメリット:特になし(偶数パリティと比較して)。
どちらが使われるのかとその理由
現代の通信においては、どちらか一方が正解ということはありません。
- 非同期シリアル通信(RS-232Cなど):設定によりどちらも選べますが、偶数パリティが使われる例が多く見られます。
- コンピュータ内部のメモリ(RAM):かつてはエラー検出のためにパリティが使われていましたが、現在はより高度なエラー訂正(ECC)に移行しています。
- 特定の物理層通信:「信号が常に変化していること」を重視する場合、全ビット0を防げる奇数パリティが好まれる傾向にあります。
理由は、パリティチェックの目的が「高い信頼性」ではなく「最低限の整合性確認」だからです。パリティチェックでは「2カ所のビットが同時に反転した(1が0になり、0が1になった)」場合にはエラーを検出できないという限界があります。
パリティビットの算出式
数学的には、排他的論理和(XOR)を用いて表現されます。偶数パリティの場合、全ビットの排他的論理和がパリティビットの値となります。
ここで、は排他的論理和(XOR)を示します。
具体例を使った説明
文字データをコンピュータ間でやり取りする際、どのように誤り検出が行われるのかを、ASCIIコードの「A」と「C」を例に挙げて具体的に解説します。
ASCIIコードのバイナリ表現
まず、送信したい文字をコンピュータが理解できる2進数(バイナリ)に変換します。ASCIIコードにおいて、大文字の「A」と「C」は以下の数値として定義されています。
- 文字「A」:10進数で65(2進数で 1000001)
- 文字「C」:10進数で67(2進数で 1000011)
ここでは、7ビットのデータに1ビットのパリティビットを付け加え、合計8ビット(1バイト)として送信する場合を想定します。
偶数パリティを適用した場合の例
偶数パリティのルールは「データ部分とパリティビットを合わせた『1』の個数が偶数になるようにする」というものです。
文字「A」を送信する場合
- データ部分は「1000001」です。
- この中にある「1」の個数は2個です。
- すでに偶数であるため、パリティビットには「0」を割り当てます。
- 送信データは「01000001」となります。
文字「C」を送信する場合
- データ部分は「1000011」です。
- この中にある「1」の個数は3個です。
- 偶数にするためには「1」がもう一つ必要なので、パリティビットには「1」を割り当てます。
- 送信データは「11000011」となります。
奇数パリティを適用した場合の例
奇数パリティのルールは「データ部分とパリティビットを合わせた『1』の個数が奇数になるようにする」というものです。
文字「A」を送信する場合
- データ部分は「1000001」です。
- 「1」の個数は2個です。
- 奇数にするために、パリティビットには「1」を割り当てます。
- 送信データは「11000001」となります。
文字「C」を送信する場合
- データ部分は「1000011」です。
- 「1」の個数は3個です。
- すでに奇数であるため、パリティビットには「0」を割り当てます。
- 送信データは「01000011」となります。
パリティビットによるエラー検出の仕組み
受信側は、届いたデータの「1」の個数を数え、あらかじめ決めておいたルール(偶数か奇数か)に違反していないかを確認します。
例えば、偶数パリティ設定で「A」を送信した際、通信ノイズによって1ビットが反転し「01000101」として届いたとします。このとき「1」の個数は3個(奇数)になるため、受信側は即座に「データが破損している」と判断し、再送を要求することができます。
まとめ
通信でどちらが使われるかは、その通信規格の設計思想によります。エラー検出の確実性を優先する場合は奇数パリティ、実装の簡便さを優先する場合は偶数パリティが選ばれることが多いですが、現在はチェックサムやCRCといったより強力な検出手法と組み合わせて運用されるのが一般的です。
今後の学習ステップ:
- 排他的論理和(XOR)の真理値表を確認し、なぜこれがパリティ算出に使えるのかを理解する。
- 「2ビットのエラー」がなぜパリティで検出できないのか、具体的なビット列を書いて検証する。
- CRC(巡回冗長検査)などの、より高度な誤り検出方式の仕組みを調べる。
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール


