Что делает ~ с переменной в php?

Потихоньку готовлюсь к ZEND 7.1 экзамену. Вот вопрос:

Напишите результат выполнения данного кода

<?php
$x = 7;
echo ~$x;

Ответ: -8

Почему?

Поиск по документации привел меня к побитовой инверсии, когда ~ делает например из 00010 строку 11101

Но как это связано с X = 7 и почему в результате получается -8?

Ниже дан хороший ответ про перевод 0111 (7 в двоичной системе) в 1000 (8 в двоичной системе), однако ответ не 8, а -8. Почему меняется знак? И почему ответ возвращается в виде числа 10-тичной системы (-8), а не 1000 (-1000) ?


Ответы (1 шт):

Автор решения: Максим Злывко

7 в двоичной системе 0111

~ $a Отрицание Устанавливаются те биты, которые не установлены в $a, и наоборот.

0111 -> превращается в 1000 -> 8

→ Ссылка