回答
什麼是int(True)
?它是1
。
1
是:
00000001
和~1
是:
11111110
哪個-2
在Two's complement
翻轉所有的位,添加1到所得號碼和interp漚結果作爲幅值的二進制表示,並添加負的符號(由於數以1開始):
11111110 → 00000001 → 00000010
↑ ↑
Flip Add 1
哪個是2,但符號爲負,因爲MSB是1
值得一提:
想想bool
,你會發現,它的本質上的數字 - 它有兩個值,True
和False
,他們一隻需要「自定義」版本的整數1和0,這些版本只能以不同的方式自行打印。它們是的整數類型int
的小類。
因此,它們的行爲與1和0完全相同,只不過bool
重新定義了str
和repr
以便以不同方式顯示它們。
>>> type(True)
<class 'bool'>
>>> isinstance(True, int)
True
>>> True == 1
True
>>> True is 1 # they're still different objects
False
@ofcapl只是想說:雖然'int('1')'也是'1',但'〜'1''是一個typeerror異常,而'〜True'不是這是因爲'bool'是'int' @ Martijn在他的回答中加入了這個信息。 –
爲了記錄@ofcapl,這個答案顯示了正在發生什麼的二進制算術解釋,而不是實際的[字節碼](http://en.wikipedia.org/wiki/Bytecode)(這可能是某種中間或從源編譯的操作級代碼)。 –
@PatrickM我想他是指二進制算術,而不是*字節碼* .. – Maroun
Python bool
類型是int
的子類(由於歷史原因;布爾值僅在Python 2.3中添加)。
由於int(True)
是1
,~True
是~1
是-2
。
請參閱PEP 285爲什麼bool
是int
的子類。
如果你想布爾逆,使用not
:
>>> not True
False
>>> not False
True
如果你想知道爲什麼~1
爲-2
,那是因爲你是反轉所有位有符號整數; 00000001
變得1111110
其中在簽署整數是一個負數,見Two's complement:
>>> # Python 3
...
>>> import struct
>>> format(struct.pack('b', 1)[0], '08b')
'00000001'
>>> format(struct.pack('b', ~1)[0], '08b')
'11111110'
其中初始1
位意味着該值是負的,而其餘位編碼正數減去的倒數一。
我們有任何函數來顯示Python中的位? –
@GrijeshChauhan ['bin'](http://docs.python.org/2/library/functions.html#bin) – thefourtheye
@GrijeshChauhan:對於兩個人的誇獎,你可以使用'struct.pack'作爲'bin(整數)'或'格式(整數,'08b')'不考慮有符號整數。 –
~True == -2
是並不奇怪如果True
意味着1
和~
裝置按位反轉 ...
... 提供
True
可以治療爲一個整數和- 整數表示在Two's complement
編輯:
- 固定整數表示和位反轉操作者之間的混合
- 施加另一拋光(該消息的更短的,需要做的工作越多)
- 1. 爲什麼2 + 1&0結果是0?
- 2. 真或假的結果,爲什麼
- 3. 4 * 0的結果是什麼:g_range [2]?
- 4. 爲什麼結果是NaN?
- 5. N = 2^x,如果爲真,則爲true。爲什麼它錯了?
- 6. 爲什麼e.AcceptSocket.ReceiveAsync是真的
- 7. 爲什麼WHERE「」=「」是真的?
- 8. 什麼是distanceBetween結果的結果聯
- 9. 爲什麼不是標量的結果?
- 10. C++ - 爲什麼結果是負的?
- 11. 爲什麼結果是2 4 6 8 10?
- 12. 使log4j加法等於真或假的結果是什麼?
- 13. 爲什麼TCL MD5:MD5結果是的md5sum結果的不同
- 14. 爲什麼如果(無)評估爲真?
- 15. 爲什麼在javascript中這個正則表達式的結果是真的?
- 16. 爲什麼{} == {}是假的,但{} + {} == {} + {}爲真
- 17. 爲什麼Perl認爲-1是真的?
- 18. 爲什麼結果都是5?
- 19. 爲什麼結果是Hello World?
- 20. 什麼是控制結構「如果真的,然後返回」被稱爲?
- 21. 這些類型轉換的結果是什麼?爲什麼?
- 22. 這段代碼段的輸出結果是什麼?爲什麼?
- 23. 爲什麼如果語句返回真?
- 24. 什麼是XSLT結果樹
- 25. 什麼是動作結果?
- 26. 什麼`結果爲int *
- 27. 爲什麼這BeautifulSoup結果[]?
- 28. 爲什麼'o'是真的? Javascript(Angular)
- 29. 爲什麼「CA」[「CA」]是真的?
- 30. 爲什麼1 =='1,2'是真的?
,因爲'〜1'是'-2',請嘗試:'True == 1' –
準確地說:「True爲1」並不是真的,但「True == 1」 。 – Bach
你真的認爲看到'UNARY_INVERT'(整個字節碼)會給答案添加任何東西嗎? – geoffspear