回答
因爲-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