Я пытаюсь понять, как работает код LFSR Галуа. На странице википедии есть рисунок с примером. Есть фрагмент кода C.
#include <stdint.h>
uint16_t lfsr = 0xACE1u;
unsigned period = 0;
do {
unsigned lsb = lfsr & 1; /* Get lsb (i.e., the output bit). */
lfsr >>= 1; /* Shift register */
if (lsb == 1) /* Only apply toggle mask if output bit is 1. */
lfsr ^= 0xB400u; /* Apply toggle mask, value has 1 at bits corresponding
* to taps, 0 elsewhere. */
++period;
} while(lfsr != 0xACE1u);
Я не могу понять рисунок, приведенный в Википедии, и соотнести его с кодом. что делает маска переключения? Может ли кто-нибудь объяснить, как операция работает с последовательностью битов примера и ее смещенными версиями. Я не знаю полей и не понимаю код. Я проверил в Интернете, но не смог найти хороших объяснений алгоритма, не вдаваясь в терминологию полей. Пожалуйста, помогите.