Как работает побитовый оператор [дубликат]


На этот вопрос уже есть ответ здесь:

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

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

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

Author: partho, 2015-05-22

3 answers

Нечетные числа в двоичном коде всегда имеют младший значащий бит (LSB), равный 1. Вот почему ваш код

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

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

(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  
 4
Author: Drakes, 2015-05-22 07:15:45

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

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

0100 & 0001 = 0000 (no bits are the same)
0101 & 0001 = 0001 (only Least Significant Bit (LSB) is 1)
 4
Author: Ronald Swets, 2015-05-22 06:28:30

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

 0
Author: Rohit Gupta, 2015-05-22 06:25:40