将基数 2(二进制)数转换为基数 10 在 python 中效果不佳

Converting base 2 (binary) number to base 10 not working quite well in python

我正在尝试编写将二进制数转换为以 10 为底的二进制数的代码,但它似乎存在一个小问题(逻辑或计算)。我不知道我做错了什么。我在网上搜索了它,但没有找到我想要的解决方案(显然还有其他方法可以转换它)。我该如何修复我的代码?我觉得我已经很接近实际结果了...

我的代码

num = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0]

string = ''
for i in num:
    string += str(i)

print(string)

def bin_to_dec(binary):
    decimal = 0
    for i in range(len(binary)):
        if string[i] == '1':
            decimal += 2 ** (len(string) - i - 1)
        if i == len(string) - 1:
            decimal += 1

    return decimal

print(bin_to_dec(string))

预期输出

4294967286

代码输出

4294967277

我是 python 的新手,请不要对我太苛刻 :D

我相信这段代码会给你正确的结果。

    decimal = 0
    for i in range(len(binary)):
        if binary[i] == '1':
            decimal += 2 ** (len(binary) - i - 1)
    return decimal

我不确定您是如何计算预期输出的,但根据我的数学计算,这是错误的。这个位数的最大值是 4294967295,你的数字减去 19,剩下 4294967276,我很确定这是正确的答案。