我已经多次尝试此代码。但是我总是得到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)
答案 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)