回答
因为-0
相同值为0
:
>>> -0
0
您指的是相同指数,第一个值列表。没有负整数零这样的东西。
也许您正在寻找-1
来代替?负整数从最终选择:
>>> A = [10, 78, "m", 89]
>>> A[0]
10
>>> A[-1]
89
>>> -0 == 0
True
所以基本上你正在寻找相同的元素。
这个测试是不够的,因为它在应用于浮点时产生误导结果:'-0.0 == 0.0',但是'str(-0.0)!= str(0.0)' – Eric
@Eric同意。但'列表索引必须是整数,而不是浮点数。所以我只是想回答OP真正问到的问题。 – thefourtheye
我想你很困惑,因为one's complement和two's complement。 在补码中,我们有2个零点,在二进制补码中,我们只有一个零点,现在有负值或正值零。
0
和-0
是一样的,因为它们都是integer
:
>>> dis.dis(lambda x: 0)
1 0 LOAD_CONST 1 (0)
3 RETURN_VALUE
>>>
>>> dis.dis(lambda x: -0)
1 0 LOAD_CONST 1 (0)
3 RETURN_VALUE
>>>
然而,有一个负零和正零,与float
和double
。而且,解析器不会跳过符号:
>>> dis.dis(lambda: 0.0)
1 0 LOAD_CONST 1 (0.0)
3 RETURN_VALUE
>>> dis.dis(lambda: -0.0)
1 0 LOAD_CONST 1 (-0.0)
3 RETURN_VALUE
>>>
在负零的情况下,最后一位是1
和正零的情况下,最后一位是0
。你可以在这里看到:
>>> from struct import pack, unpack
>>>
>>> # with float, 32th bit is 1 in negative zero
>>>
>>> '0x%.8x' % unpack('I', pack('f', -0.0))[0]
'0x80000000'
>>> '0x%.8x' % unpack('I', pack('f', 0.0))[0]
'0x00000000'
>>>
>>> unpack('I', pack('f', -0.0))[0] >> 31
1L
>>> unpack('I', pack('f', 0.0))[0] >> 31
0
>>>
>>> # same thing with double, 64th bit is 1
>>>
>>> '0x%.16x' % unpack('Q', pack('d', 0.0))[0]
'0x0000000000000000'
>>> '0x%.16x' % unpack('Q', pack('d', -0.0))[0]
'0x8000000000000000'
>>>
>>> unpack('Q', pack('d', 0.0))[0] >> 63
0
>>> unpack('Q', pack('d', -0.0))[0] >> 63
1L
>>>
你可以阅读更多关于IEEE floating point。
- 1. 在Python中列表列表
- 2. 在Python列表
- 3. 在Python列表
- 4. 在Python列表
- 5. 在Python列表
- 6. 列表在Python
- 7. 在Python列表
- 8. 的Python:在列表
- 9. 从列表在Python
- 10. 的Python:在列表
- 11. 的Python:在列表
- 12. 从列表在Python
- 13. Python的 - 在列表
- 14. 的Python:在列表
- 15. 列表值在python
- 16. 的Python在列表
- 17. 的Python:在列表
- 18. 的Python:在列表
- 19. 的Python:在列表
- 20. 的Python在列表
- 21. Python-列表列表
- 22. 在Python中操作列表的列表
- 23. 在Python中操作列表的列表
- 24. 在列表python中查找列表
- 25. 在python中复制列表的列表?
- 26. 在Python中创建列表的列表
- 27. 在Python中重构列表的列表
- 28. 在Python中联合列表的列表
- 29. 转换列表到列表在Python
- 30. 从列表在Python列表中移除
为什么* x * + 0与* x * - 0相同? – Johnsyweb