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