Ответ 1
Биты и байты
В вычислениях числа внутренне представлены в двоичном формате. Это означает, что при использовании целочисленного типа для переменной это будет внутренне отображаться как суммирование нулей и единиц.
Как вы знаете, один бит представляет один 0
или один 1
. Конкатенация восьми из этих битов представляет собой байт, например 00000101
, который является числом 5. 00000101
, вы знаете, как числа представлены в двоичном формате, если нет, посмотрите здесь.
В PHP число (в основном) 4 байта. Это означает, что ваш номер фактически использует 32 бита внутренней памяти. Но для простоты, на протяжении всего этого ответа я буду использовать 8-битные номера.
Сохранение состояний в битах
Теперь представьте, что вы хотите создать программу, которая содержит состояние, основанное на нескольких значениях, которые являются одним (true
) или нулевым (false
). Можно хранить эти значения в разных переменных, они могут быть логическими или целыми. Или вместо этого используйте единую целочисленную переменную и используйте каждый бит своих внутренних 32 бит, чтобы представить разные истины и фальши.
Пример: 00000101
. Здесь первый бит (чтение справа налево) является истинным, что представляет собой первую переменную. Второй - false, который представляет вторую переменную. Третья правда. И так далее...
Это очень компактный способ хранения данных и имеет множество применений.
Бит-маскировка
Это то, где приходит бит-маскирование. Это звучит сложно, но на самом деле это очень просто.
Бит-маскировка позволяет использовать операции, которые работают на уровне бит.
- Редактирование отдельных битов в байтах (байтах)
- Проверка наличия конкретных значений бит или нет.
Вы на самом деле применяете маску к значению, где в нашем случае это наше состояние 00000101
а маска снова является двоичным числом, которое указывает интересующие биты.
Выполняя двоичные операции с маской и состоянием, можно добиться следующего:
- Оператор AND извлекает подмножество бит в состоянии
- Оператор OR устанавливает подмножество бит в состоянии
- Оператор XOR переключает подмножество бит в состоянии
Если мы хотим установить определенное значение true, мы могли бы сделать это, используя оператор OR и следующую битовую маску:
Mask: 10000000b
Value: 00000101b
---- OR ---------
Result: 10000101b
Или можно выбрать конкретное значение из состояния с помощью оператора И:
Mask: 00000100b
Value: 00000101b
---- AND ---------
Result: 00000100b
Я предлагаю вам глубже изучить его и познакомиться с жаргоном. Хорошим началом может быть эта ссылка.
Удачи!