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

如何在Python中准确模拟二进制补码格式的有符号32位整数int32

Python模拟int32溢出代码正确性校验

前置问题解答:Python是否采用二进制补码表示整数?

Python本身没有采用固定长度的二进制补码存储整数,但它的位运算逻辑完全符合无限长补码的规则:正整数默认有无限多前导0,负整数默认有无限多前导1,和你描述的特性完全一致。

你的int32实现是完全正确的

实现逻辑验证

你的代码逻辑完全贴合32位补码的转换规则,每一步作用如下:

  • x & INT32_MASK:不管输入是正还是负,先截断得到低32位的二进制对应的无符号整数值
  • bool(x & INT32_SIGNBIT):判断截断后的32位值的最高位(符号位)是否为1,确认是否为int32范围内的负数
  • 若符号位为1,执行i32 += ~INT32_MASK:~INT32_MASK等价于-2**32,相当于把32位无符号补码值转成Python对应的负整数,计算逻辑完全符合补码转有符号数的规则。

补充测试用例验证

你可以用以下用例进一步验证正确性,全部返回True就说明实现符合预期:

# 边界值测试
print(int32(0) == 0)
print(int32(INT32_MAX) == INT32_MAX)
print(int32(INT32_MIN) == INT32_MIN)
# 负数测试
print(int32(-1) == -1)
print(int32(-123) == -123)
# 溢出截断测试
print(int32(2**32 + 123) == 123)
print(int32(-2**32 - 123) == -123)
# 交叉运算测试
print(int32(INT32_MAX + 123) == INT32_MIN + 122)

可选简化写法

你的代码可以等价简化为一行,逻辑完全一致:

def int32(x):
    return (x & 0xffffffff) - (0x100000000 if x & 0x80000000 else 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:45:04