2015-05-22 4 views
4

Я не понимаю, как работают следующие коды?Как работает побитовый оператор

function odd($var){ 
    return ($var & 1); 
} 
echo odd(4); /* returns and print 0 */ 
echo odd(5); /* returns and print 1 */ 

эта функция возвращает истину, если аргумент является нечетным числом и возвращает ложь, если аргумент является четным числом. Как это работает?

+1

http://php.net/manual/en/language.operators.bitwise.php –

+0

Все это объяснил [здесь] (http://en.wikipedia.org/wiki/Bitwise_operation) – Viral

+0

поблагодарить у для ваших ссылок – partho

ответ

4

нечетные числа в двоичном всегда есть наименее значащий бит (LSB) из 1. Поэтому ваш код

function odd($var){ 
    return ($var & 1); 
} 

возвращает истину по нечетным числам. Вот ваши примеры из вашего вопроса:

(decimal) 4 & 1 = (binary) 100 & 001 = (binary) 000 = (decimal) 0 = false 
(decimal) 5 & 1 = (binary) 101 & 001 = (binary) 001 = (decimal) 1 = true 

Другой способ думать о нем

100 (decimal 4) - an even number 
AND 001 (decimal 1) 
    = 000 (decimal 0) - return false 

и

101 (decimal 5) - an odd number 
AND 001 (decimal 1) 
    = 001 (decimal 1) - return true 
0

Он маскируя все биты кроме 0. & является и оператор. И 1 - 000000000001 в двоичном формате. Таким образом, он работает так, как его называют.

4

Поразрядное сравнение уже говорит, что он делает: он сравнивает числа побито.

Если мы берем 4 бита, представление бит 4 равно: 0100. Битовое представление 5 равно 0101. Когда мы сравниваем это с & (и), он возвращает биты, которые оба установлены.

0100 & 0001 = 0000 (no bits are the same) 
0101 & 0001 = 0001 (only Least Significant Bit (LSB) is 1) 
Смежные вопросы