По моему опыту, при вычислении вручную проще преобразовать его в полином, особенно когда много нулей.
1010 = 1*x^3 + 0*x^2 + 1*x^1 + 0*x^0 = x^3 + x = x3 + x
101101000 = x8 + x6 + x5 + x3
-------------------
x3 + x ) x8 + x6 + x5 + x3
Затем вы делите наибольший член на дивиденд (x^8
) на первый член в делителе (x^3
), в результате x^5
. Вы помещаете это число сверху, а затем умножаете его на каждый член в делителе . Это дает следующее для первой итерации:
x5
-------------------
x3 + x ) x8 + x6 + x5 + x3
x8 + x6
Выполнение XOR для каждого термина, а затем получение нового дивиденда: x5 + x3
:
x5
-------------------
x3 + x ) x8 + x6 + x5 + x3
x8 + x6
-------------------
x5 + x3
Следуйте той же схеме, пока самый большой член дивиденда не станет меньше самого большого члена дивизора. После завершения расчетов это будет выглядеть так:
x5 + x2
-------------------
x3 + x ) x8 + x6 + x5 + x3
x8 + x6
-------------------
x5 + x3
x5 + x3
-------------------
0
Напоминание в этом случае равно 0, что указывает на то, что, скорее всего, во время передачи не было ошибок.
Примечание. В приведенном выше примере я сократил x^y
до xy
, чтобы уменьшить беспорядок в ответе, поскольку SO не поддерживает форматирование математических уравнений.
Примечание 2: добавление / вычитание кратного делителя из дивиденда также даст напоминание 0, так как (P(x) + a*C(x)) / C(x) = P(x)/C(x) + a*C(x)/C(x)
дает то же самое напоминание, что и P(x)/C(x)
, поскольку напоминание a*C(x)/C(x)
равно 0.