0

我试图在 python 中增加二进制序列,同时保持位长。到目前为止,我正在使用这段代码......

'{0:b}'.format(long('0100', 2) + 1)

这将获取二进制数,将其转换为长整数,加一,然后将其转换回二进制数。例如,01 -> 10。

但是,如果我输入一个诸如“0100”之类的数字,而不是将其增加到“0101”,我的代码会将其增加到“101”,因此它忽略了第一个“0”,而只是将“100”增加到“101” '。

任何有关如何使我的代码保持位长的帮助将不胜感激。谢谢

4

3 回答 3

0

str.format lets you specify the length as a parameter like this

>>> n = '0100'
>>> '{:0{}b}'.format(long(n, 2) + 1, len(n))
'0101'
于 2013-05-01T02:39:24.467 回答
0

这可能最好使用格式字符串来解决。获取输入的长度,从中构造一个格式字符串,然后使用它来打印递增的数字。

from __future__ import print_function
# Input here, as a string
s = "0101"
# Convert to a number
n = long(s, 2)
# Construct a format string
f = "0{}b".format(len(s))
# Format the incremented number; this is your output
t = format(n + 1, f)
print(t)

要硬编码到四个二进制位置(左填充 0),您将使用04b,对于五个您将使用05b等。在上面的代码中,我们只获取输入字符串的长度。

哦,如果你输入一个像1111加 1 这样的数字,你会得到10000,因为你需要一个额外的位来表示它。如果你想绕行0000t = format(n + 1, f)[-len(s):]

于 2013-05-01T02:36:21.977 回答
0

这是因为5在从 int(或 long)转换为二进制后表示为“101”,因此在您0用作填充符之前添加一些 0,并在格式化时传递初始二进制数的宽度。

In [35]: b='0100'

In [36]: '{0:0{1:}b}'.format(long(b, 2) + 1,len(b))
Out[36]: '0101'

In [37]: b='0010000'

In [38]: '{0:0{1:}b}'.format(long(b, 2) + 1,len(b))
Out[38]: '0010001'
于 2013-05-01T01:56:52.927 回答