Lets n
ser 4
que en binario se representa como:
00000000 00000000 00000000 00000100
(n&1)
en bits y el n
con 1
.
1
tiene la representación binaria de:
00000000 00000000 00000000 00000001
El resultado de la operación AND bit a bit es 0
:
00000000 00000000 00000000 00000100 = n
00000000 00000000 00000000 00000001 = 1
------------------------------------
00000000 00000000 00000000 00000000 = 0
lo que la condición de tiempo es cierto.
Efectivamente, se usó (n&1)
para extraer el bit menos significativo del n
.
En el bucle while se gira a la derecha (>>
) n
por 1
. Desplazar a la derecha un número por k
es lo mismo que dividir el número por 2^k
.
n
que ahora 00000000 00000000 00000000 00000100
está a la derecha cambiando una vez que se convierte en 00000000 00000000 00000000 00000010
que es 2
.
A continuación se extrae el LSB (bit menos significativo) de n
nuevo que es 0
y desplazamiento a la derecha de nuevo para dar 00000000 00000000 00000000 0000001
que es 1
.
A continuación volvemos a extraer LSB de n, que ahora es 1
y el bucle se rompe.
Así eficacia con la que se siguen dividiendo su número de n
por 2
hasta que se convierte impares números impares tienen su conjunto LSB.
También tenga en cuenta que si es n
0
Para empezar se va a ir en un bucle infinito porque no importa cuántas veces se divide 0
por 2
no se obtendrá un número impar.
Vaya, no vi la etiqueta de tarea en esto la primera vez. ¿Es demasiada información? – BlueMonkMN