You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我写的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:15:07