Какая функция побитового оператора (Тильда)
Возможный дубликат:
Что здесь означает этот оператор?
Бит не работает в PHP (или, возможно, на любом другом языке)
Может ли кто-нибудь объяснить мне оператор ~
в PHP? Я знаю это NOT-operator, но почему PHP преобразовывает следующую инструкцию в отрицательное значение переменной минус один?
$a = 1; echo ~$a // echo -2
$a = 2; echo ~$a // echo -3
$a = 3; echo ~$a // echo -4
Ответы
Ответ 1
Это называется арифметикой двух дополнений. Вы можете прочитать об этом более подробно здесь.
Оператор ~
является двоичным оператором отрицания (в отличие от логического отрицания), и тем самым он обращает все биты своего операнда. Результатом является отрицательное число в двух арифметических дополнениях.
Ответ 2
Это побитовое НЕ.
Он преобразует все 1s в 0z и все 0s в 1s. Таким образом, 1 становится -2 (0b111111111110 в двоичном представлении).
Взгляните на документ
http://php.net/manual/en/language.operators.bitwise.php
Ответ 3
~
переворачивает все биты числа. В двух дополнениях (google it) математическое отрицание можно выполнить, перевернув все биты, а затем добавив 1. Если вы делаете только первый шаг (т.е. Просто переверните биты), у вас есть добавочный инверсный минус 1.