Python实现32位有符号整数反转输入1结果不符该如何修改
问题原因
Python 的整数类型默认无长度限制,int(result, 2) 会将32位二进制串按无符号整数解析,当反转后的32位二进制最高位为1时,你得到的是正整数2147483648,而非32位有符号补码规则下对应的负数值-2147483648。
需修改的内容
你需要新增32位补码转有符号整数的判断逻辑,修改后的完整代码如下:
input1=int(input("Enter the number: ")) binary=bin(input1).replace('0b','') result=binary.zfill(32) num=list(result) num=num[::-1] result=''.join(num) ans=int(result,2) # 新增32位有符号数转换逻辑 if ans >= 2 ** 31: ans -= 2 ** 32 print(ans)
修改点说明
- 32位有符号整数的合法取值范围是
[-2^31, 2^31 - 1],当int(result, 2)得到的结果大于等于2^31时,说明当前32位二进制的最高位为1,属于负数的补码表示,减去2^32即可得到对应的有符号负数值。 - 输入1的场景下,初始解析得到的ans为2147483648,减去4294967296(即
2^32)后正好得到预期的-2147483648。 - 原有正常用例不受影响:输入2时反转后的数值小于
2^31,不会触发修正逻辑,输出保持原有正确结果。
内容的提问来源于stack exchange,提问作者ExploreWorld
相关产品推荐
相关产品推荐

