При тестировании реализации CRC я заметил, что CRC 0x01 обычно (?), Кажется, сам полином.Однако, пытаясь вручную выполнить двоичное длинное деление, я все время теряю ведущую «1» полинома, например, с сообщением «0x01» и полиномом «0x1021», я получаю
1 0000 0000 0000 (zero padded value)
(XOR) 1 0000 0010 0001
-----------------
0 0000 0010 0001 = 0x0021
Но любая примерная реализация (я имею в виду XMODEM-CRC здесь) приводит к 0x1021 для данного ввода.
Глядя на https://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks, Я могу видеть, как шаг XOR старшего битавыход из регистра сдвига с полиномом генератора вызовет этот результат.Что я не понимаю, так это то, почему этот шаг вообще выполняется таким образом, поскольку он явно меняет результат истинного полиномиального деления?