Побитовый оператор ~ (не)

Рейтинг: 0Ответов: 3Опубликовано: 12.03.2015

Добрый день. Я имею число 9 (1001) - в двоичной системе. И когда провожу побитовую операцию ~ (НЕ), то получается число (0110) - в двоичной системе, в десятичной равно 6, как я понимаю. Но источник http://learn.javascript.ru/ считает, что:

9 (по осн. 10) 
= 00000000000000000000000000001001 (по осн. 2)
           --------------------------------
~9 (по осн. 10) 
= 11111111111111111111111111110110 (по осн. 2) 
= -10 (по осн. 10)

Прошу, подскажите, где моя ошибка.

Ответы

▲ 1

@dors, Ваша ошибка в том, что для положительных чисел Вы не учитываете лидирующие нули. В реальной жизни они присутствуют, их количество зависит от размера (типа) переменной.

▲ 0

Оператор тильда (побитовое НЕ) - выполняет для целых чисел преобразование -( n + 1 ).
Так что верно они написали.

▲ 0

Самый левый бит — это бит знака. Если к 11111111111111111111111111110110 прибавить 1010, то получится 0, поэтому это число кодирует -1010 в двоичной системе исчисления.

Подробнее: https://ru.wikipedia.org/wiki/Дополнительный_код_(представление_числа)