Ответ 1
Двоичное представление False
равно 0000000000000000
(сколько бит используется, зависит от реализации). Если вы выполните на нем двоичную операцию NOT, она будет изменена на 1111111111111111
, т.е. True
, но это двоичное представление целого числа со знаком -1
.
Немного 1
в наиболее значимой позиции сигнализирует отрицательное число для подписанных номеров. Изменение знака числа происходит путем инвертирования всех бит и добавления 1. Это называется Два дополнения.
Изменим знак 1111111111111111
. Первый инвертированный; мы получаем:
0000000000000000
Затем добавьте один:
0000000000000001
, это 1
.
Это доказательство того, что 1111111111111111
было двоичным представлением -1
.
UPDATE
Кроме того, при сравнении этих значений не сравнивайте
x = -1
или
x = 1
сравните
x <> 0
это всегда дает правильный результат, независимо от используемого соглашения. Большинство реализаций обрабатывают любое значение, равное нулю как True
.