PHP

PHP. Побитовые операции

В процессе изучения веб-разработки. Вообще не понял эту тему. Пытаюсь вникнуть 2 час..

1. Бит, как понял - 1 число (0 or 1)
2. Если хотя бы 1 бит, равен нулю, в результате будет 0.
3. Если 2 бита будут равняться 1 (будут иметь значение (?)(во всем выражении(?))), на выходе получаем 1.
4. Если хотя бы 1 бит, единичный (имеет значение 1(?)) и др. случаях, на выходе будет 0.

Почему 4 пункт не противоречит 3? И откуда вообще взялось 5, при 13&21 ??
(чек. материал с фото)
таблица истинности для "И"
0 & 0 = 0
0 & 1 = 0
1 & 1 = 1
1 & 0 = 0

5 получается, потому что двоичная запись результата соответствует 5 в десятичной.
ОС
Он Самый *
10 596
Лучший ответ
Сергей Малышев Спасибо, ты лучший
И это если оба операнда равны 1 тогда получается 1
ИЛИ - это если хотя бы один из операндов
НЕ - отрицание меняет 0 на 1 и наоборот
Таким макаром складываешь каждую цифру в числе и получаешь результат
Сергей Wwww
Сергей Wwww
59 846
Оператор "И" во всех языках программирования работает одинаково, так что вопрос не только про PHP) Ну это так, к слову.

Суть оператора "И" (and) – выдать истину только если оба аргумента – истинны: "и то, и то – истинно". То есть "истина и истина = истина". Во всех прочих случаях оператор "И" даёт ложь.
 1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

У оператора "или" немного иной принцип работы: "хотя бы одно значение должно быть истинным". Для оператора "или" таблица такова:
 1 or 1 = 1
1 or 0 = 1
0 or 1 = 1
0 or 0 = 0

Оператор "не и" (nand – "not and") даёт прямо противоположные значения "и" (and):
 1 nand 1 = 0
1 nand 0 = 1
0 nand 1 = 1
0 nand 0 = 1

Оператор "не или" (nor – "not or") даёт прямо противоположные значения "или" (or):
 1 nor 1 = 0
1 nor 0 = 0
0 nor 1 = 0
0 nor 0 = 1

Также есть "исключающее или" (xor), оно даёт истину если ТОЛЬКО ОДНО значение – истинно:
 1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0

Также есть "исключающее не или" (xnor), оно даёт значения прямо противоположно xor:
 1 xnor 1 = 1
1 xnor 0 = 0
0 xnor 1 = 0
0 xnor 0 = 1

Побитовые операции выполняются по принципу сравнения каждого бита двух чисел. Например есть два числа в двоичной форме: 10101 и 10001, представим их в виде "ABCDE" и "FGHIJ". И, допустим, сравниваются они оператором "и". Таким образом получается:
 10101
and
10011
В буквенном представлении:
 ABCDE
and
FGHIJ

Теперь нам нужно сравнить по вертикали числа по принципу "и":
 A and F == 1 and 1 = 1
B and G == 0 and 0 = 0
C and H == 1 and 0 = 0
D and I == 0 and 1 = 0
E and J == 1 and 1 = 1
Итоговое сравнение: 10101 and 10011 = 10001.

Если одно число короче другого – в начало короткого числа добавляются нули до одинакового количества битов, то есть при сравнении "1001 and 1100101" мы будем их сравнивать как "0001001 and 1100101".

По вопросу:
И откуда вообще взялось 5, при 13&21
Сначала мы переводим 13 и 21 из десятичного в двоичное представление и получаем 1101 и 10101 соответственно. Выравниваем их до одной длины и получаем: 01101 & 10101. Сравниваем их оператором and:
 01101
and
10101
=
00101
Теперь переводим полученное число "00101" в десятичный вид и на выходе как раз получаем десятичное число 5.
Ваня Луценко
Ваня Луценко
11 395
бит не число а значение true/ false
Виктор Кожевин бит это значение 1 разряда числа в двоичной системе счисления