TL; DR
Да, это ожидается. Большинство языков программирования считают только 0 ложным.
Разработал
Это имеет смысл, если учесть, как -1 представлено в процессоре. Обычно вы конвертируете положительное число в его отрицательный аналог, используя дополнение 2 . 2-й комплекс представляет отрицательное двоичное число путем инвертирования всех битов и добавления 1 . Скажем, у нас есть 4-битная архитектура, десятичная 1 представлена как 0001. Чтобы получить ее отрицательное представление, инвертируйте все биты и добавьте 1, таким образом, 0001 становится 1110 + 1 = 1111.
Когда мы хотим узнать, является ли значение false
, мы можем or
всех его входных данных, если результат равен 0, он ложен, в противном случае это правда, и, таким образом, это имеет смысл что -1 == правда.
Резонанс, что мы используем дополнение 2, как дополнение к дополнению 1 (где мы просто инвертируем все биты, не добавляя 1), является точным, потому что мы не хотим иметь возможность представлять как 0, так и -0.