Python中位或操作的混淆



为什么Python这样做:

100|111 = 111
1000|1001 = 1001

上面两个例子看起来像位或操作

但是对于下面的例子:

1000|1111 = 2047

为什么是2047而不是1111?

看起来您正在对整数执行操作,因此它们是相应的二进制表示。您需要使用int中的base参数将它们转换为二进制,然后执行按位或操作:

bin(int('1000', 2) | int('1111', 2))
# '0b1111'

否则会得到:

1000|1111
# 2047

对应以下二进制数之间的位或(而不是整数数的实际1和0):

bin(1000)
#'0b1111101000'
bin(1111)
# '0b10001010111'
int(bin(1000), 2) | int(bin(1111), 2)
# 2047

最新更新