按位学习

Learning bitwise

我很难弄明白为什么我的代码会得到这样的结果。

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

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

这 returns 结果是:

1100011

1101000

1101035

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

在这里做 int() 是没有意义的(它将您的二进制位串解释为十进制数)。你只想要:

c = ord('c')
h = ord('h')
result = c | h

print(format(c, 'b'))
print(format(h, 'b'))
print(format(result, 'b'))

(仅使用format进行屏幕显示,不用于计算!)

打印:

1100011
1101000
1101011

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

但是,当您在此结果上使用 int 时,withug 通知 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').. .