誤り検出(チェックサム、パリティ、CRC)

CRC (Cyclic Redundancy Check)(巡回冗長検査)

誤り検出符号の一種。割り算に似た計算をして得た余りをチェック用の符号として用いる。この計算は回路で実装しやすい。パリティや単純な加算によるチェックサムよりも検出精度が高い。

 

パリティチェック

誤り検出符号の一種。パリティビットを含むデータの合計が奇数(偶数)になるようにパリティビットを設定する。もし奇数(偶数)でなかったらそのデータは誤りを含むということになる。

 

チェックサム

誤り検出符号の一種。チェックサムの値をどうするかはいろいろある。データの総和をチェックサムの値にすることや、「対象となるパケットに対し、16ビットごとの 1 の補数和を取り、さらにそれの 1 の補数を取る」というものも。

 

1の補数、2の補数

2の補数を理解する (1) - とあるソフトウェア開発者のブログ

ある数Aに対する1の補数とは、次のような条件を満たす数のことです。「『A』の2進表現と『Aの1の補数』の2進表現を加算すると、計算結果の全てのビットが1になる。」

例えば、Aの2進表現(8ビット)が01011100だった場合、Aの1の補数の2進表現は、10100011となります。(01011100 + 10100011 = 11111111) 例を見ればすぐにわかるように、Aの1の補数は、Aの2進表現ビット反転させたものになります。

 

ある数Aに対する2の補数とは、次のような条件を満たす数のことです。「『A』の2進表現と『Aの2の補数』の2進表現を加算すると、計算結果は2nになる。(nはAのビット数)」

例えば、Aの2進表現(8ビット)が01011100だった場合、Aの2の補数の2進表現は、10100100となります。(01011100 + 10100100 = 100000000 = 28) 定義からすぐにわかるように、Aの2の補数は、Aの1の補数に1を足した値となります。1の補数はビット反転で計算できるため、2の補数は「ビット反転+1」で計算できることになります。