Бит взлома и операции по модулю
Читая это:http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64BitsDiv
Я пришел к фразе:
Последний шаг, который включает в себя деление модуля на 2 ^ 10 - 1, приводит к объединению каждого набора из 10 битов (с позиций 0-9, 10-19, 20-29, ...) в 64-битном значение.
(речь идет об обращении битов в числе) ...
поэтому я сделал несколько расчетов:
reverted = (input * 0x0202020202ULL & 0x010884422010ULL) % 1023;
b = 74 : 01001010
b
* 0x0202020202 : 1000000010000000100000001000000010
= 9494949494 :01001010010010100100101001001010010010100
& 10884422010 :10000100010000100010000100010000000010000
= 84000010 : 10000100000000000000000000010000
% 1023 : 1111111111
= 82 : 01010010
Теперь единственная неясная часть - это та часть, где большое число по модулю 1023 (2 ^ 10 - 1) упаковывает и дает мне инвертированные биты ... Я не нашел хорошего документа о взаимосвязи между битовыми операциями и Операция по модулю (рядомx % 2^n == x & (2^n - 1))
) так что, возможно, если бы кто-то пролил свет на это, это было бы очень плодотворно.