Supponiamo di voler trovare il 2 ° bit in equivalente binario di 13 (binario: 1101). Esso dovrebbe restituire 0.Come ottenere l'ennesimo bit (da destra) in un equivalente binario di un intero in PHP?
risposta
http://php.net/manual/en/language.operators.bitwise.php
($x >> 1) & 1
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)
holy sh .. che è ancora più difficile da leggere, quindi bit shift. Comunque molto originale modo di farlo. –
@Pim Lol, grazie. Logicamente è abbastanza semplice, forse troppo. ;) – deceze
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);
e la funzione per ottenere po 'all'ennesima: funzione nBit (numero $, $ n) {return ($ numero >> $ n-1) & 1;} –
@stereofrog: hai ragione, ma per l'ennesimo bit, devi scoprire pow (2, n-1) che viene ancora eseguito spostando. – understack
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