我决定将-1转换为布尔值,以检查结果如何。
与我的预期相反,bool(-1)
将返回FALSE
,它将返回TRUE
。
为什么会这样?
答案 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。