为什么我写的2's complement转十进制Python代码运行结果始终为0?
问题根因
- 类型不匹配导致分支未执行:你读取的
binary_value是字符串类型,其首位取值为字符'0'或'1',和整数0、1做相等判断时结果永远为False,所以你的正负分支逻辑完全没有运行,最终输出初始赋值的0。 - 负数分支逻辑错误:原代码负数分支的循环中,每次都会将
result重新赋值为minimum + 当前位的权值,既重复叠加了最小值,也没有实现所有位权值的累加,即便分支能触发也会得到错误结果。 - 可选优化点:可增加输入校验逻辑,判断输入的二进制串长度是否等于你指定的位宽,避免输入不匹配引发计算异常。
修正后可运行代码
def convert_decimal(): sign_len = int(input("Please enter the number of bits for your value: ")) binary_value = input("Please enter a binary value in 2's complement to be converted into decimal: ") # 输入校验(可选) if len(binary_value) != sign_len: print("输入的二进制长度与指定位宽不匹配") return bin_reversed = binary_value[::-1] result = 0 # 首位判断改为和字符比较 if binary_value[0] == '0': for bit in range(len(binary_value)): result += int(bin_reversed[bit]) * (2 ** bit) elif binary_value[0] == '1': minimum = -1 * 2 ** (sign_len - 1) # 先给result赋值最小值,再累加除符号位外所有位的权值 result = minimum for bit in range(sign_len - 1): result += int(bin_reversed[bit]) * (2 ** bit) print(result) return result convert_decimal()
内容的提问来源于stack exchange,提问作者Özgün Can Orhan
相关产品推荐
相关产品推荐

