При чтении: 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))
), поэтому, возможно, если кто-то осветит это, это будет очень плодотворно.