Python: bool (-1) возвращает true.Почему это происходит? - PullRequest
0 голосов
/ 14 ноября 2018

Я решил бросить -1 в бул, чтобы проверить, каков был результат.

Вопреки моим ожиданиям, что bool(-1) вернет FALSE, вернется TRUE.

Почему это так?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

На основании документации Python 3 большинство встроенных объектов, считающихся ложными:

  • Константы, определенные как ложные: Нет и Ложь.
  • Ноль любого числового типа: 0, 0,0, 0j, десятичное число (0), дробь (0, 1)
  • Пустые последовательности и коллекции: '', (), [], {}, set (), range (0)

Обратите внимание, что в нем задано только ноль, вместо любого значения, равного или меньшего 0. Это также распространено в различных других языках программирования.

0 голосов
/ 14 ноября 2018

TL; DR

Да, это ожидается. Большинство языков программирования считают только 0 ложным.

Разработал

Это имеет смысл, если учесть, как -1 представлено в процессоре. Обычно вы конвертируете положительное число в его отрицательный аналог, используя дополнение 2 . 2-й комплекс представляет отрицательное двоичное число путем инвертирования всех битов и добавления 1 . Скажем, у нас есть 4-битная архитектура, десятичная 1 представлена ​​как 0001. Чтобы получить ее отрицательное представление, инвертируйте все биты и добавьте 1, таким образом, 0001 становится 1110 + 1 = 1111.

Когда мы хотим узнать, является ли значение false, мы можем or всех его входных данных, если результат равен 0, он ложен, в противном случае это правда, и, таким образом, это имеет смысл что -1 == правда.

Резонанс, что мы используем дополнение 2, как дополнение к дополнению 1 (где мы просто инвертируем все биты, не добавляя 1), является точным, потому что мы не хотим иметь возможность представлять как 0, так и -0.

...