Bit hacking y operación de módulo
Mientras lee esto:http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64BitsDiv
Llegué a la frase:
El último paso, que implica la división del módulo por 2 ^ 10 - 1, tiene el efecto de fusionar cada conjunto de 10 bits (desde las posiciones 0-9, 10-19, 20-29, ...) en los 64 bits valor.
(se trata de invertir los bits en un número) ...
así que hice algunos cálculos:
reverted = (input * 0x0202020202ULL & 0x010884422010ULL) % 1023;
b = 74 : 01001010
b
* 0x0202020202 : 1000000010000000100000001000000010
= 9494949494 :01001010010010100100101001001010010010100
& 10884422010 :10000100010000100010000100010000000010000
= 84000010 : 10000100000000000000000000010000
% 1023 : 1111111111
= 82 : 01010010
Ahora, la única parte que no está clara es la parte donde el módulo de números grandes en 1023 (2 ^ 10 - 1) empaqueta y me da los bits invertidos ... No encontré ningún buen documento sobre la relación entre las operaciones de bits y el operación de módulo (al ladox % 2^n == x & (2^n - 1))
) así que tal vez si alguien echara una luz sobre esto sería muy fructífero.