雑記
パリティビット
最終更新:
匿名ユーザー
-
view
チェックサムを書いたので、似たようなロジックとしてパリティビットの話も。
bitの話も、もうしてあるので、準備も整ったことだし。
チェックサムは、1byteに入りきらない値が切り捨てられることを利用してデータの整合性を(ある程度)保障するというものでした。
これと似たようなテクニックとして、ビットを使うテクニックがあります。
1byteは8bitですが、通信などにおいては送信側と受信側で正常にエンコード/デコードできれば、問題はありませんね。
そこで、例えば送信する時には7bitずつ送って、最後の1bitをパリティビットとして使うことでデータの整合性を保障するということができます。
どういう風にするかというと、例えば0x5a5a5a5aという4byteのデータを通信で送受信するとすると、bitで表すと
【0101 1010 0101 1010 0101 1010 0101 1010】
となるわけです。
これを7bitごとに送るとすると、【0101 101】ですね。
このbitを 0 + 1 + 0 + 1 + 1 + 0 + 1 とすると、2進数なので【101】となります。この一桁目の【1】を先ほどの7bitの最後に付加して送信用の1byteとするのです。
つまり、最初に送受信されるデータは【01011011】となります。
あとは、この手順を元データの先頭から順に繰り返すだけです。
受信側は受信したデータの前7bitから同じ計算をして、それが8bitめのbitと一致しているかをチェックします。
これが一致していたら一応OK、一致していなかったらNGというわけです。
これはチェックサムと比べると0か1かのbitをチェックに使っているので、ノイズがのったりして正しいデータが送受信できていない場合でも1/2の確立でOKと判断されてしまいます。
しかしながら、チェックサムが1byte以上のデータでないと使えないのに比べ、パリティビットはbit単位でデータの整合性をチェックすることができます(ただし、あまり細かすぎる単位でパリティビットを持たせても、逆にパリティビット自体にノイズがのりやすくなりますし、データ量が増えてしまうため意味がありませんが)。
チェックサムにしろ、パリティビットにしろ、それを使うことでデータの完全な保障はできませんが、併用することでかなり信頼性の高いデータの送受信が行えることになります。
プログラムにおいては、例えばC言語の文法などよりもこういったアルゴリズムを知っているか、使えるかということのほうが重要なことが多いかもしれません。