閉じる
HOME»応用情報技術者試験掲示板»令和7年秋季午前問4 CRCの解説
投稿する

令和7年秋季午前問4 CRCの解説 [6155]

 匿名希望さん(No.1) 
令和7年秋季午前問4 CRCの解説
3.受信側は~
【誤】検査対象データ+検査用データを~
【正】検査対象データ-検査用データを~

【誤】 例) (10001000 + 110) mod 1010 = 0
【正】 例) (10001000 - 110) mod 1010 = 0

【誤】 例) (10001000 + 110) mod 1010 = 0
【正】 例) (10001000 - 110) mod 1010 = 0
----------
[イ] 受信側では、
【誤】 検査対象データに検査用データを連結した値を~
【正】 検査対象データから検査用データを引いた値を~
2026.02.08 14:06
ストップビットさん(No.2) 
「割り算」と言うものの算術除算ではありません。
しかも2進数の「割り算」はシフトと引き算の組み合わせです。

算術引き算の真理値表
0-0= 0
0-1=-1 ←算術演算では負になる。ボローの処理が面倒
1-0= 1
1-1= 0

-1を1とみなすとボローの処理が不要になります。

0-0= 0
0-1= 1
1-0= 1
1-1= 0

これはXORの真理値表そのものです。
という訳でCRCの計算にはXORを使います。

例になっている 10001000 mod 1010 を計算すると

10001000
1010
--------
00101000
__1010
--------
00000000000 ←割り切れちゃった!→CRC=000で、110にならない。

例を十進数で計算してみると、136 mod 10 ≡ 6
例は、まさかの算術演算でした。


CRC=000だと分かりにくいので、データの末尾ビットを反転。
○送信側処理
送信データを生成多項式で除算。(算術除算ではなくXOR)

10001001 ←元データ
1010
--------
00101001
__1010
--------
00000001000
_______1010
-----------
00000000010 →CRC=010

元データに検査用データ(CRC値)を連結した、10001001010 を送信する。
※元データに検査用データを加算したり減算したりすると、受信側で分離できません。
 ですから送信する情報は元データに検査用データ(CRC値)を連結したものです。

○受信側処理
受信した 10001001010 を生成多項式で除算。(算術除算ではなくXOR)

10001001010
1010
-----------
00101001010
__1010
-----------
00000001010
_______1010
-----------
00000000000 ←結果がゼロになった。つまりエラーはない。
検査用データ(CRC値)を切り離した 10001001 が正しいデータだと判断できる。
2026.02.09 19:15
返信投稿用フォームスパム防止のためにスレッド作成日から40日経過したスレッドへの投稿はできません。

Pagetop