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