Как работает побитовый оператор [дубликат]
На этот вопрос уже есть ответ здесь:
- Что такое побитовые операторы? 9 ответов
Я не понимаю, как работают следующие коды?
function odd($var){
return ($var & 1);
}
echo odd(4); /* returns and print 0 */
echo odd(5); /* returns and print 1 */
Эта функция возвращает значение true, если аргумент является нечетным числом , и возвращает значение false, если аргумент является четным числом. Как это работает?
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 бита, то битовое представление 4 равно: 0100. Битовое представление 5 равно 0101. Когда мы сравниваем это с & (и), он возвращает биты, которые оба установлены.
0100 & 0001 = 0000 (no bits are the same)
0101 & 0001 = 0001 (only Least Significant Bit (LSB) is 1)
Он маскирует все биты, кроме 0. &
- оператор and. И 1
- это 000000000001
в двоичном формате. Так что он работает так, как его называют.