Какая функция побитового оператора (Тильда)

Возможный дубликат:
Что здесь означает этот оператор?
Бит не работает в 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.