首页 > 解决方案 > 逐位学习

问题描述

我很难弄清楚为什么我的代码会得到结果。

c = int(format(ord('c'), 'b'))
h = int(format(ord('h'), 'b'))
result = c | h

print(c)
print(h)
print(result)

这将返回以下结果:

1100011

1101000

1101035

所以我的问题是在 | 操作,为什么是1101035(根据我的理解)应该是1101011?

标签: pythonpython-3.xbitwise-operators

解决方案


format对第二个参数的调用"b"为您提供第一个参数中数字的二进制表示。所以,如果你打印它,你会看到“0”和“1”。

但是,当您int在此结果上使用时,如果int您的字符串以 2 为底,则它认为这些是十进制数。因此,它将“读取”序列“1100011”(99 的二进制表示,“c”字符的 unicode 代码点),如“1_100_011”或“一百万十万一十一” - 那就是c如果您使用它打印或进行任何数字运算,则为变量中的数字。

这可以通过告诉int您正在读取的数字字符串本身是二进制来轻松解决:

c = int(format(ord('c'), 'b'), 2)

(将 2 作为第二个参数传递给“int”以指示基数)。如果您此时检查“c”,它包含数字 99,它的行为与您的“|”一样 操作员。当然,如果您不查看数字的二进制表示,则生成它开始时没有任何意义,因此您的代码可能只是c = ord('c')......


推荐阅读