Оператор NOT или дополнения (~) и отрицательные двоичные числа могут сбивать с толку.
~ 2 = -3, потому что вы используете формулу ~ x = -x - 1 Побитовое дополнение десятичного числа - это отрицание числа минус 1.
ПРИМЕЧАНИЕ: только использование 4 битздесь для примеров ниже, но в действительности PHP использует 32 бита.
Преобразование отрицательного десятичного числа (то есть: -3) в двоичное происходит за 3 шага: 1) преобразовать положительную версию десятичного числа в двоичное (то есть: 3 = 0011) 2) переворачивает биты (то есть: 0011 становится 1100) 3) добавляет 1 (то есть: 1100 + 0001 = 1101)
Возможно, вам интересно, как 1101 = -3.Хорошо, PHP использует метод "2'splement" для рендеринга отрицательных двоичных чисел.Если самый левый бит равен 1, то двоичное число отрицательно, и вы переворачиваете биты и добавляете 1. Если оно равно 0, то оно положительно и вам ничего не нужно делать.Таким образом, 0010 будет положительным 2. Если это 1101, оно будет отрицательным, и вы перевернете биты, чтобы получить 0010. Добавьте 1, и вы получите 0011, который равен -3.