Я пишу библиотеку для вычислений в конечных полях. Сейчас я делаю функции для операций над многочленами над полем
. Вот пример функции взятия остатка, которую я нашел в одной книге на псевдокоде.
Код:
int degree(uint8_t a) {
if (a == 0)
return -1;
else
return bit_length(a) - 1;
}
uint8_t rem(uint8_t a, uint8_t b) {
uint8_t result = a;
while (degree(result) >= degree(b)) {
int position = degree(result) - degree(b);
result ^= b << position; // minus x^pos
}
return result;
}
Мне непонятна в функции
операция
Код:
result ^= b << position
Что здесь происходит? Строкой выше разность степеней многочленов
и
это степень икса в частном при делении в столбик. А что происходит потом, где операция
и битовый сдвиг? Здесь мой комментарий 'minus x power pos', я предположил, что это вычитание результата умножения делителя на степень икса как при делении в столбик, но я не уверен.