令和7年秋季午前問4 CRCの解説
匿名希望さん
(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
----------
[イ] 受信側では、
【誤】 検査対象データに検査用データを連結した値を~
【正】 検査対象データから検査用データを引いた値を~
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 が正しいデータだと判断できる。
しかも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日経過したスレッドへの投稿はできません。
広告