Створіть таблиці для байтового 32-бітного обчислення CRC на поліномі: x ^ 32 + x ^ 26 + x ^ 23 + x ^ 22 + x ^ 16 + x ^ 12 + x ^ 11 + x ^ 10 + x ^ 8 + х ^ 7 + х ^ 5 + х ^ 4 + х ^ 2 + х + 1.
Поліноми над GF (2) представлені у двійкових, один біт на коефіцієнт, з найнижчою потужністю у найбільш значущому біті. Тоді додавання многочленів є просто винятковою або, а множення многочлена на x - це правильний зсув на одиницю. Якщо ми називаємо наведений многочлен p і представляємо байт як многочлен q, також з найнижчою потужністю у найбільш значущому біті (тому байт 0xb1 є многочленом x ^ 7 + x ^ 3 + x + 1), то CRC є (q * x ^ 32) mod p, де mod b означає залишок після ділення a на b.
Цей обчислення проводиться за допомогою методу зсувного регістру множення та отримання решти. Реєстр ініціалізується до нуля, і для кожного вхідного біта x ^ 32 додається mod p до реєстру, якщо біт є одиничним (де x ^ 32 mod p - p + x ^ 32 = x ^ 26 + ... +1), і регістр помножується на mod p на x (що зміщується вправо на одиницю і додає x ^ 32 mod p, якщо біт зміщений на один). Починаємо з найвищої потужності (найменш значущого біта) q і повторюємо для всіх восьми біт q.
Перша таблиця - це просто CRC усіх можливих восьми бітових значень. Це вся інформація, необхідна для генерування CRC на байті даних одночасно для всіх комбінацій значень реєстру CRC та вхідних байтів. У решті таблиць передбачено обчислення CRC за словом одночасно як для машин з великим ендіанієм, так і для малих ендіанців, де слово - чотири байти.