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

基于二进制与补码实现正数转负数的Python代码问题求助

问题解决:正数转对应负数二进制(补码实现)

先解决你遇到的语法错误

你尝试把print(num % 2, end='')改成return(num % 2, end = '')时出现语法错误,原因很简单:end=''是print()函数的专属参数,return语句不能用这个参数。return只能返回具体的值,不能带输出格式参数。如果想用递归返回二进制字符串,正确写法是递归拼接字符串:

def decimal_to_binary(num):
    if num >= 1:
        return decimal_to_binary(num // 2) + str(num % 2)
    return ''

再解决功能问题:输出前置0、得不到负数

你的代码逻辑存在核心错误:负数的二进制是用补码表示的,正确步骤是「原正数二进制取反 → 加1」,且需要固定二进制位数(比如8位、16位,否则会出现无限前置1)。另外代码里还有变量名大小写错误:NewDenary = Denary + 1中的Denary应为小写denary(Python大小写敏感)。

完整修正代码

# 输入二进制转十进制正数
binary = str(input("Enter a binary number: "))
rev_binary = binary[::-1]
count = 0
denary = 0

for number in rev_binary:
    denary += (2 ** count) * int(number)
    count += 1

print(f"The original denary number is: [{denary}]")

# 定义十进制转固定位数二进制的函数(非递归,避免栈溢出)
def decimal_to_binary(num, bits=8):
    if num == 0:
        return '0' * bits
    binary_str = ''
    while num > 0:
        binary_str = str(num % 2) + binary_str
        num = num // 2
    # 补前导0到指定位数
    return binary_str.zfill(bits)

# 计算负数的补码
# 1. 原正数转8位二进制
original_8bit = decimal_to_binary(denary)
# 2. 按位取反
inverted_8bit = ''.join('1' if c == '0' else '0' for c in original_8bit)
# 3. 取反后的数加1
inverted_denary = int(inverted_8bit, 2) + 1
# 4. 转8位二进制得到补码(负数的二进制表示)
negative_binary = decimal_to_binary(inverted_denary)

print(f"The corresponding negative binary (8-bit two's complement) is: [{negative_binary}]")

代码说明

  • 采用非递归的进制转换逻辑,避免递归处理大数时的栈溢出问题
  • 固定为8位二进制(可修改bits参数切换为16位等)
  • 严格遵循补码规则:取反→加1,得到标准负数二进制表示
  • 修复了变量名大小写错误,避免未定义变量报错

示例运行

输入1(二进制):

Enter a binary number: 1
The original denary number is: [1]
The corresponding negative binary (8-bit two's complement) is: [11111111]

输入1101(对应十进制13):

Enter a binary number: 1101
The original denary number is: [13]
The corresponding negative binary (8-bit two's complement) is: [11110011]

内容的提问来源于stack exchange,提问作者Squillbill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 23:35:13