基于补码的有符号整数相加时无符号溢出检测优化问询
补码有符号整数相加的无符号溢出检测优化
我们需要检测两个以补码表示的有符号整数相加时的无符号溢出。这里用到的自定义SignedInteger类会在数值超出range(-2**(bits - 1), 2**(bits - 1))范围时,自动按2**bits取模。
现有检测算法
def algorithm(a: SignedInteger, b: SignedInteger, c: SignedInteger) -> bool: if (a < 0) == (b < 0): # 两个数的最高位是否相同? return a < 0 # 最高位是否为1? return c >= 0 # 和的最高位是否为0?
使用示例
c = a+b algorithm(a, b, c) # 后续继续使用c
参考的无符号整数溢出检测算法
无符号整数的溢出检测有更简洁高效的实现:
def algorithm(a: UnsignedInteger, b: UnsignedInteger, c: UnsignedInteger) -> bool: return c < a
我们希望找到类似上述无符号算法的简洁高效优化方案,注意此问题不涉及有符号溢出检测。
内容的提问来源于stack exchange,提问作者nonhuman
相关产品推荐
相关产品推荐

