HOME»応用情報技術者試験掲示板»令和7年秋季午前問4 CRCの解説
投稿する
»[6153] 令和7年春午前問30「MTUとはなんぞ」 投稿数:5
»[6152] 学習履歴が反映されない問題(午後問題) 投稿数:2
令和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
----------
[イ] 受信側では、
【誤】 検査対象データに検査用データを連結した値を~
【正】 検査対象データから検査用データを引いた値を~
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
その他のスレッド
»[6154] スマホ版の「次の問題」ボタン 投稿数:10»[6153] 令和7年春午前問30「MTUとはなんぞ」 投稿数:5
»[6152] 学習履歴が反映されない問題(午後問題) 投稿数:2
