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

补码数乘2时的溢出检测:需检查哪些位?

n位补码数乘2的溢出判断:最少检查位数及具体位

核心结论

判断n位补码有符号数乘以2是否溢出,只需要检查最高两位(符号位和次高位),也就是最少检查2位。

原理说明

补码中,乘以2等价于算术左移一位,溢出的本质是结果超出n位补码的表示范围[-2^(n-1), 2^(n-1)-1],通过最高两位的关系就能直接判断:

  • 若符号位(第n位,从1开始计数)与次高位(第n-1位)相同:
    • 正数(符号位为0):原数最大为2^(n-2)-1,乘2后结果为2^(n-1)-2,未超过正数上限2^(n-1)-1,无溢出。
    • 负数(符号位为1):原数范围是[-2^(n-1), -2^(n-2)],乘2后结果落在[-2^n, -2^(n-1)],其中-2^(n-1)是n位补码的合法最小值,其余结果也在表示范围内,无溢出。
  • 若符号位与次高位不同:
    • 正数(符号位0、次高位1):原数最小为2^(n-2),乘2后结果为2^(n-1),超出正数上限2^(n-1)-1,溢出。
    • 负数(符号位1、次高位0):原数范围是[-2^(n-1)+1, -2^(n-2)-1],乘2后结果小于n位补码最小值-2^(n-1),溢出。

示例验证(以4位补码为例,范围[-8,7])

  • 0100(十进制4):符号位0、次高位1 → 乘2得8,超出范围,溢出。
  • 1011(十进制-5):符号位1、次高位0 → 乘2得-10,超出范围,溢出。
  • 0011(十进制3):符号位0、次高位0 → 乘2得6,合法无溢出。
  • 1100(十进制-4):符号位1、次高位1 → 乘2得-8,合法无溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:07:23