N位二进制数

8 投票
5 回答
14226 浏览
提问于 2025-04-19 01:28

为了生成 n 位的二进制数字,我做了这个,想得到最多 16 个二进制数字。

n = 6                       # for 6 digits
for i in xrange(16):
    b = bin(i)[2:]
    l = len(b)
    b = str(0) * (n - l) + b
    print b

结果是这样的

000000
000001
000010
000011
000100
000101
000110
000111
001000
001001
001010
001011
001100
001101
001110
001111

但我想要的是得到这些值,而不需要在前面加一串 0
有没有人能帮我解决这个问题?
谢谢!

5 个回答

-1
n = 4 
for i in range(0, 2**n):
    b = bin(i)[2:]
    print(str(b).zfill(n))

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

n = 6

000000
000001
000010
000011 .... 111101
111110
111111

-1

通过这段代码,你可以生成从0到n的二进制数字列表,时间复杂度是O(2^int(log(n)))。


import math

num=25

n=int(math.log(num,2))

x=['0','1']

for i in range(1,int(n)+1):

        for j in range(0,2**i):  

        x.append('1'+x[j])

        x[j]='0'+x[j]



print(x[0:num])

输出结果::

['00000', '00001', '00010', '00011', '00100', '00101', '00110', '00111', '01000', '01001', '01010', '01011', '01100', '01101', '01110', '01111', '10000', '10001', '10010', '10011', '10100', '10101', '10110', '10111', '11000']

希望这对你有帮助。

3

你可以把列表推导和位转换结合起来,像这样使用:

def binary_list(n):
    return ['{:0{}b}'.format(i, n) for i in range(n*n-1)]

print(binary_list(3)) -->
['000', '001', '010', '011', '100', '101', '110', '111']

或者,如果你想把每个数字存放在自己的位置上,可以这样做:

def binary_list(n):
    return [[int(j) for j in '{:0{}b}'.format(i, n)] for i in range(n*n-1)]

print(binary_list(3))--->
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]

8

如果你在问有没有其他的方法:

n = 6
for i in xrange(16):
    b = bin(i)[2:].zfill(n)
    print b

str.zfill(n) 这个方法会在字符串的左边加上零,直到字符串的长度至少达到 n


如果你只是想去掉前面的零:

for i in xrange(16):
    b = bin(i)[2:]
    print b
9

去掉那条填充 0 的线。

n = 6
for i in xrange(16):
    b = bin(i)[2:]
    l = len(b)
    #b = str(0) * (n - l) + b  # <--------
    print b

如果你是想在没有字符串操作符的情况下填充数字,可以使用 str.format,配合 b 类型格式

n = 6
for i in xrange(16):
    print '{:0{}b}'.format(i, n)
    # OR  print '{:06b}'.format(i)

    # OR  print '{:b}'.format(i)  if you want no leading 0s.

撰写回答