Python:bool(-1)返回true。为什么会这样?

时间:2018-11-14 08:21:15

标签: python boolean

我决定将-1转换为布尔值,以检查结果如何。

与我的预期相反,bool(-1)将返回FALSE,它将返回TRUE

为什么会这样?

2 个答案:

答案 0 :(得分:2)

基于Python 3 documentation,大多数被认为是假的内置对象是:

  
      
  • 常量定义为假:无和为假。
  •   
  • 任何数字类型的零:0、0.0、0j,十进制(0),小数(0、1)
  •   
  • 空序列和集合:'',(),[],{},set(),范围(0)
  •   

请注意,它仅将零指定为false,而不是等于或小于0的任何值。这在其他各种编程语言中也很常见。

答案 1 :(得分:0)

TL; DR

是的,这是预期的。大多数编程语言只将0视为错误。

详尽

当您考虑-1在处理器中的表示方式时,这很有意义。通常,您可以使用2's complement将正数转换为负数。 2的补余表示将所有位取反并加1 来表示负的二进制数。假设我们有一个4位体系结构,则十进制1表示为0001。要获得其负数表示,请将所有位取反并加1,因此0001变为1110 +1 = 1111。

当我们想知道一个值是否为false时,我们可以or的所有输入,如果结果为0,则为假,否则为真,因此,从某种意义上说- 1 == true。

我们使用2的补码作为1的补码(在这里我们只对所有位求反而不加1)的原因很明显,因为我们不想同时表示0和-0。