我对(某种)补语很熟悉,但是我可以使用关于Python 2.7的复习。为什么〜0b1在Python 2.7中输出-2?
为什么~0b1
打印出-2
?
我知道一个补码可以将1s转换为0,反之亦然。我期望~0b1
打印0b0
或0
。
是否print
自动将字节文字转换为某种形式的int
?
任何帮助表示赞赏。
我对(某种)补语很熟悉,但是我可以使用关于Python 2.7的复习。为什么〜0b1在Python 2.7中输出-2?
为什么~0b1
打印出-2
?
我知道一个补码可以将1s转换为0,反之亦然。我期望~0b1
打印0b0
或0
。
是否print
自动将字节文字转换为某种形式的int
?
任何帮助表示赞赏。
0b1
只是另一种写作方式0b0000...01
(整数1)。随着~
你会得到逐位补1 -> 0
和0 -> 1
(包括符号位),所以您将获得:
0b111....10
这是-2
。
您的回答,结合这个问题的最佳答案(http://stackoverflow.com/questions/8305199/the-tilde-operator-in-python)确实帮助我了解发生了什么。 谢谢! – MSD
这不是*字节文字*。这是另一种类型的'int'文字,让你用二进制*表达你的'int'。所以没有转换,因为它总是一个'int' *。 –
@ juanpa.arrivillaga感谢您的评论。这解释了一下。 – MSD
因此,换句话说,'0b10000','0x10'和'16'都是相同'int'对象的文字。默认情况下,当一个'int'被打印到一个屏幕时,它的十进制表示被打印出来。 –