2017-05-18 16 views
1

我对(某种)补语很熟悉,但是我可以使用关于Python 2.7的复习。为什么〜0b1在Python 2.7中输出-2?

为什么~0b1打印出-2

我知道一个补码可以将1s转换为0,反之亦然。我期望~0b1打印0b00

是否print自动将字节文字转换为某种形式的int

任何帮助表示赞赏。

+3

这不是*字节文字*。这是另一种类型的'int'文字,让你用二进制*表达你的'int'。所以没有转换,因为它总是一个'int' *。 –

+0

@ juanpa.arrivillaga感谢您的评论。这解释了一下。 – MSD

+0

因此,换句话说,'0b10000','0x10'和'16'都是相同'int'对象的文字。默认情况下,当一个'int'被打印到一个屏幕时,它的十进制表示被打印出来。 –

回答

1

0b1只是另一种写作方式0b0000...01(整数1)。随着~你会得到逐位补1 -> 00 -> 1(包括符号位),所以您将获得:

0b111....10 

这是-2

+0

您的回答,结合这个问题的最佳答案(http://stackoverflow.com/questions/8305199/the-tilde-operator-in-python)确实帮助我了解发生了什么。 谢谢! – MSD

相关问题