パリティビット
パリティビット (英: parity bit) は、コンピュータと通信において、与えられた二進数に対して全体の偶奇性を保つために与えられる一桁の二進数(つまり 0 か 1)である。パリティビットは最も単純な誤り検出符号である。
パリティ機構を使用するにあたっては、奇数(odd)か偶数(even)かを指定しなければならない。パリティ(奇偶性)がevenであるというのは、与えられた二進数の中に 1 が偶数個存在することを意味し、そうでなければoddである。多くの場合oddパリティが用いられる。even パリティは巡回冗長検査 (CRC) の特殊ケースであり、1ビット CRCは x+1 という多項式から生成される。
非常に単純であるため、パリティはハードウェアの様々なところで使われている。ただしエラーが起きたら再送するか、あるいは単にエラーを検出するだけで足りる場合である。たとえばSCSIバスはパリティを使用してエラーを検出している。マイクロプロセッサの命令キャッシュもパリティビットを持っていることが多い。命令キャッシュの内容は単なるメインメモリのコピーなので、エラーを検出したら再度メモリから持ってくればよいからである。
シリアルなデータ転送では、データビット7個につき even パリティビット1個(そして1~2個のストップビット=区切り)というのが一般的である。even パリティとは、値が 1 であるビットの個数が偶数であることを意味する。このフォーマットは 7ビットのASCIIキャラクタを適切に扱い、扱いやすい8ビットにするという意味で便利である。他のフォーマットも使用可能である。たとえば 8ビットデータにパリティビットを追加するという場合もある。
通信においては、パリティは送受信ハードウェア (UART) 内で付与されチェックされる。エラーがあったかどうかはその周辺ハードウェアのステータスをCPUが読んで判断する。修復(訂正)は再度送信してもらうのが一般的である。詳細はCPU(オペレーティングシステム)が設定する。
なお、B 側の検証においては、「パリティを除いて計算した値とパリティを比較」する代わりに、CRC と同様に「パリティを含めて計算した値が特定の値になるか」と言う方法でも良い。上記の例では、それぞれ最後の1ステップを
とできる。一般にはこちら実装の方が回路等が単純になる。次の例では 4ビットの値 0010 を even パリティで送信して誤りが発生した場合を示す(送受信値の左端のビットがパリティビット)。
B が計算したパリティ値 (0) は、受信したパリティビットの値 (1) と一致しないため、誤りが発生していることが分かる。次の例も同じ値だが、パリティビット自体が誤りによって変化した場合を示す。
この場合も B が計算したパリティ値 (1) と受信したパリティビットの値 (0) が一致しないので、誤りが検出される。
この技法には限界がある。パリティビットは奇数個のビットの誤りしか検出できない。偶数個のビットで誤りが発生した場合、パリティ値が変化しないため、誤りを検出できない(誤り検出訂正参照)。上記と同じ例で、偶数個のビットの誤りが発生した場合を示す。
B が計算したパリティ値 (1) と受信したパリティビットの値 (0) が一致してしまうので、2ビットの誤りを検出できない。