2010-07-27 13 views
5

Cuando estaba tratando de aprender de un programa existente, ¿no podía entender lo que intentan hacer las siguientes dos líneas de código?las funcionalidades de dos líneas de código

for(i=0;0==(x&1);++i)x>>=1; 


if(0==(x-=y)) return y<<i; 

Cualquier explicación sería apreciada.

+0

¿Qué devolverá la función si no se cumple la condición? –

Respuesta

9
for(i=0;0==(x&1);++i)x>>=1 

Busca el bit menos significativo se establece en 1 en un número entero

if(0==(x-=y)) return y<<i; 

Resta y de x, y si el resultado es 0, devuelve y desplazado sobre (hacia los bits más significativos) por i bits.

+1

El primer bit es el bit menos significativo (más a la derecha) –

4

for(i=0;0==(x&1);++i)x>>=1;

Este código x>>=1 está cambiando los bits de x a la derecha un solo lugar. Esto continuará mientras 0==(x&1) sea verdadero, lo que significa que el bit más a la derecha de x es 0. i es el número de bits desplazados.

if(0==(x-=y)) return y<<i;

Este código resta y de x. Entonces, si x es 0, el código devuelve y desplazado a la izquierda por i bits.

0

¿Esto es una pregunta de la entrevista?

Los operadores < < y >> y & también son operaciones bit a bit.

Superficialmente, el primero parece desplazarse hacia la derecha hasta encontrar un 1 bit, pero es destructivo.

El otro está bastante convulsionado.

Sin embargo, sin más contexto, no está claro lo que el programa está tratando de hacer.

0

Will volver x si es xy izquierda se movió una indeterminada i número de posiciones.

Es decir, si x = 01010000 y y = 00000101 devolverá x. No hay información en la pregunta para adivinar qué devolverá si la condición no se cumple.

Cuestiones relacionadas