Cyklický redundantní součet: Porovnání verzí
Smazaný obsah Přidaný obsah
mBez shrnutí editace |
|||
Řádek 51:
Před vlastním výpočtem je <math>M(x)</math> doplněn zprava osmi nulovými bity. Výpočet zbytku po dělení polynomu <math>M(x) \cdot x^8</math> polynomem <math>G(x)</math> bude připomínat ruční dělení víceciferných čísel se dvěma zjednodušeními:
* počítá se pouze se symboly 0 a 1, navíc v tělese <math>GF(2^n)</math> (takže např. 1 + 1 = 0; 0 − 1 = 1),
*
{| border=1 align=center
Řádek 181:
R = 0 '''1 0 1 0 0 0 1 0''' // remainderPolynomial := remainderPolynomial * x + bitString[16]
První vadou výše uvedené ukázky je potřeba mít v paměti ''n''+1 bitů pro <tt>remainderPolynomial</tt>, druhou vadou je potřeba doplňovat ''n'' nulových bitů vpravo za <tt>bitString</tt>. První problém lze snadno vyřešit vhodným přehozením operací (např. <tt>rem = (msb(rem)) ? ((rem<<1 + bit) xor gen) : (rem<<1 + bit);</tt>). Druhý problém lze
Protože operace XOR použitá pro odečítání generujícího polynomu od zprávy je asociativní a komutativní, nezáleží na pořadí operandů při výpočtu <tt>remainderPolynomial</tt>. A navíc bit z pole <tt>bitString</tt> stačí přidat až na poslední chvíli před testováním, zda provést <tt>xor</tt>. V následující ukázce také není potřeba předvyplňovat <tt>remainderPolynomial</tt> prvními ''n'' bity.
|