将基数 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,我很确定这是正确的答案。
我正在尝试编写将二进制数转换为以 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,我很确定这是正确的答案。