2010-04-15 9 views

risposta

21
+12

e la funzione per ottenere po 'all'ennesima: funzione nBit (numero $, $ n) {return ($ numero >> $ n-1) & 1;} –

+0

@stereofrog: hai ragione, ma per l'ennesimo bit, devi scoprire pow (2, n-1) che viene ancora eseguito spostando. – understack

+0

E se non si conosce l'ultimo bit impostato su 1 di una variabile numero $, è possibile eseguire: 'function getLeftMost1Bit ($ number) {return log ($ number)/log (2); } ' – tonix

4

risposta Nizza dal Andrey, sicuramente andare con la sua soluzione. Ecco un altro modo per farlo, però, con la manipolazione delle stringhe (lo so, lo so ...):

substr(decbin($x), -2, 1) 
+0

holy sh .. che è ancora più difficile da leggere, quindi bit shift. Comunque molto originale modo di farlo. –

+0

@Pim Lol, grazie. Logicamente è abbastanza semplice, forse troppo. ;) – deceze

4

Qui è un po 'la funzione più universale per estrarre anche bit gamme.

function extract_bits($value, $start_pos, $end_pos) 
{ 
    $mask = (1 << ($end_pos - $start_pos)) - 1; 
    return ($value >> $start_pos) & $mask; 
} 

ad esempio per estrarre valore del secondo bit da 13 sarebbe:

extract_bits(13,1,2); 
Problemi correlati