基于二进制与补码实现正数转负数的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
相关产品推荐
相关产品推荐

