python - 逐位学习
问题描述
我很难弄清楚为什么我的代码会得到结果。
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?
解决方案
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')
......
推荐阅读
- scala - 见证抽象类型实现了类型类
- apache-spark - 使用 Spark JDBC 和 Avatica 从 Apache Druid 中的表中读取记录
- python - 无法理解为什么并且无法正常工作
- python - (Python)为什么我的继承不起作用?
- python - AttributeError:当使用数据框处理时间时,只能使用具有 datetimelike 值的 .dt 访问器
- node.js - 从 POSTMAN nodeJs 向 Azure 服务总线发送消息
- python - 尽管 delay_factor=4,但 Netmiko 超时 - OSError:在 send_command_expect 中从未检测到搜索模式
- docker - Dockerfile - 如何使用 ENV 指令附加 PATH?
- sql - 如何使用条件设置自动递增列值
- batch-processing - 使用 Windows 批处理批量提取文本文件的一部分