2010-07-27 17 views
5

Quando stavo cercando di imparare da un programma esistente, non riuscivo a capire cosa provano a fare le seguenti due righe di codice?le funzionalità di due righe di codice

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


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

Qualsiasi spiegazione sarebbe apprezzata.

+0

Cosa restituirà la funzione se la condizione non viene soddisfatta? –

risposta

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

trova il bit meno significativo impostato 1 in un numero intero

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

Sottrae y da x, e se il risultato è 0, restituisce y spostato sopra (verso i bit più significativi) da i bit.

+1

Il primo bit è il bit meno significativo (più a destra) –

4

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

Questo codice x>>=1 sta spostando i bit x a destra di una posizione. Ciò continuerà finché 0==(x&1) è vero, il che significa che il bit più a destra di x è uno 0. i è il numero di bit spostati.

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

Questo codice sottrae y da x. Quindi, se x è 0 il codice restituisce spostato a sinistra di i bit.

0

Questa è una domanda di intervista?

Gli operatori < < e >> & sono tutti operazioni bit a bit.

Superficialmente, il primo sembra spostarsi a destra finché non trova un 1 bit, ma è distruttivo.

L'altro è abbastanza convulso.

Tuttavia, senza più contesto non è chiaro cosa il programma sta cercando di fare.

0

Restituisce x se x è a sinistra spostato un numero di posizioni indeterminato i.

Cioè, se x = 01010000 e y = 00000101 restituirà x. Non ci sono informazioni nella domanda per indovinare cosa restituirà se la condizione non viene soddisfatta.

Problemi correlati