使用列表将二进制数转换为十进制数

时间:2020-05-18 11:29:21

标签: python python-3.x list

我已经多次尝试此代码。但是我总是得到45的输出,这是错误的。

a = [1, 0, 1, 1]
value = 0
a.reverse()
print(a)             #reversed list
for i in a:
    if i==1:
        for x in range(0,len(a)):
            value += pow(2,x)
    else:
        continue
print("decimal value of binary number is:",value)

4 个答案:

答案 0 :(得分:1)

您应该研究按位运算。这样可以提高效率,并且是处理位时的最佳实践。还有更多的Python方式可以实现这一点(例如,使用int(x, 2)。通过按位操作,它看起来像这样:

for i in a:
    value |= i
    value <<= 1
value >>= 1

答案 1 :(得分:0)

每次检测到1时,都将2 ^ 3 + 2 ^ 2 + 2 ^ 1 + 2 ^ 0 = 15进行3次,这就是为什么得到45的原因。您应该这样做:

a=[1,0,1,1]
value=0
a.reverse()
print(a)             #reversed list
for pos, i in enumerate(a):
    if i==1:
        value += 2**pos
    else:
        continue
print("decimal value of binary number is:",value)

答案 2 :(得分:0)

此代码会将您将列表转换为十进制数字。

a=[1,0,1,1]
value=0
for i, v in enumerate(a):
    value += pow(2, i) * v

print("decimal value of binary number is:",value)

输出

decimal value of binary number is: 13

答案 3 :(得分:0)

将列表转换为字符串时,可以使用int函数:

int("".join(map(str,a[::-1])), base=2)