2012-02-03 2 views
16

Можно создать дубликат:
What does this ~ operator mean here?
Bit not operation in PHP(or any other language probably)Что функция ~ побитового оператора (Тильда)

Может кто-нибудь объяснить мне оператор ~ в PHP? Я знаю, что это NOT-operator, но почему PHP преобразует следующую инструкцию в отрицательное значение переменной минус один?

$a = 1; echo ~$a // echo -2 
$a = 2; echo ~$a // echo -3 
$a = 3; echo ~$a // echo -4 
+0

Информация об этом доступна _all через internet_ –

+3

В дубликате нет ничего, что связано с арифметикой дополнений двух, что является сущностью этого вопроса. Я сомневаюсь, что это _exact_ duplicate. Однако этот [этот вопрос] (http://stackoverflow.com/q/8785054/509303) охватывает ту же проблему. – buc

ответ

23

Это называется арифметикой дополнений . Вы можете прочитать об этом in more detail here.

Оператор ~ является оператором двоичного отрицания (в отличие от логического отрицания), и тем самым он инвертирует все биты его операнда. Результат - отрицательное число в арифметике дополнений двух.

3

Это побитовое НЕ.

Он преобразует все 1s в 0z и все 0s в 1s. Таким образом, 1 становится -2 (0b111111111110 в двоичном представлении).

Посмотрите на документ http://php.net/manual/en/language.operators.bitwise.php

+2

1 становится -2, 0 становится -1. – Leigh

+0

-2 действительно. Просто проверил. – akond

+0

Это правда. Это побитовое НЕ, но знак с номерами цифр показывает, что оно отображается, т. Е. -2. Но если вы посмотрите на двоичный уровень, вы увидите, что это полностью отрицание. –

2

~ переворачивает все биты числа. В двух дополнениях (google it) математическое отрицание можно реализовать, перевернув все биты, а затем добавив 1. Если вы делаете только первый шаг (т. Е. Просто переверните биты), у вас есть добавочный обратный минус 1.