[C con Clase] Volcar los Bits de un número binario
Steven Davidson
srd4121 en njit.edu
Jue Feb 25 21:30:09 CET 2010
Hola Abel,
Abel wrote:
> Hola a todos,
> hace poco tenía la tarea de volcar los Bits de un número binario
> cualquiera. Investigando encontré esta solución, pero que no está
> explicado cómo ocurre el cambio:
>
> int n=136
> //136 en binario= 1000 1000, quiero girar los Bits hasta alcanzar:
> 0001 0001
> la solución que encontré:
> x = ((136 * 0x80200802) & 0x0884422110) * 0x0101010101 >> 32;
> osea con esto x me dá 17 = 0001 0001.
>
> podría explicarme alguien, cómo ocurre el cambio?
Mirando los patrones de los bits, entiendo un poco lo que se hace, pero
tengo que reconocer que no sé exactamente las razones. Posiblemente con
algo más de tiempo, pudiere darte una explicación.
De todas maneras, afrontaría este problema de otra manera. Como quieres
invertir el orden de los bits, creo que es más fácil de entender y de
implementar un algoritmo basado en un bucle que vaya consultando cada
bit e ir agregándolo a otra variable para generar el resultado que
quieres. Por ejemplo,
1. n : número original a invertir
2. x : número resultante de la inversión del orden de 'n'
3. x <- 0
4. Mientras que n > 0, repetir
5. x <- (x << 1) + (n & 1)
6. n <- (n >> 1)
7. Terminar
Espero que esto te sirva.
Steven
Más información sobre la lista de distribución Cconclase