【发布时间】:2014-09-26 04:16:58
【问题描述】:
在 Python 3 中处理二进制数时出现意外输出。
我们可以通过内置的 bin() 函数轻松地将任何整数转换为二进制。例如:
>>>bin(4243125)
这是我尝试添加 2 个二进制函数时的问题:
>>>bin(x)+bin(y)
输出是两个二进制数的串联,而不是二进制数的加法。二进制函数的输出变成了字符串。
二进制函数中的加法可以正常工作:
>>>bin(x+y)
并且尝试在没有 bin() 的情况下添加两个二进制数也是可行的:
>>>0b100+0b10111
将 bin() 输出设置为字符串的原因/目的是什么?
【问题讨论】:
-
两个原因:1. 几乎所有 Python 数字字面量都以 10 为底,所以
101是 101,而不是 5,和 2.(例外,仅在 Python 2.x 中)前导0表示八进制,所以0101 == 65。因此,为避免混淆,bin返回一个以0b为前缀的字符串。 -
Python 中的整数已经以二进制形式存储(嗯,从技术上讲,它们存储在 base 215 或 base 230 中,但是足够近)。内部二进制转换为十进制字符串以供显示(例如,
str或repr)。你想达到什么目的? -
那为什么它能够计算出'str'类型的二进制数呢?像 0b101+0b1 但不是 bin()+bin()。
-
你想错了:抽象地说,整数只是一个数字——它没有有个底。没有“十进制整数”或“二进制整数”之类的东西。整数有十进制和二进制表示,它们是字符串,而不是数字。同样,您想在这里实现什么目标?你想解决的真正问题是什么?
-
以某种方式返回字符串类型的“数字”,这不是中断进一步的过程吗?
标签: python python-3.x binary