[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