Python - 在保持位长的同时递增二进制序列

时间:2013-05-01 01:54:58

标签: python binary

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

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

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

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

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

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

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

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):]

答案 2 :(得分:0)

str.format允许您将长度指定为此参数

>>> n = '0100'
>>> '{:0{}b}'.format(long(n, 2) + 1, len(n))
'0101'