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

4位二进制Two's complement(补码)加法溢出判定疑问

4位补码加法溢出问题解答

核心误区纠正

你混淆了无符号数溢出和补码溢出的判断规则:无符号数只要相加产生最高位进位就算溢出,但补码的最高位进位属于可以丢弃的进位,只有运算结果超出4位补码的表示范围(-8 ~ +7)时才会判定为溢出。
补码溢出的两个快速判断方法:

  • 两个同符号数相加,结果的符号和原加数符号相反,一定溢出
  • 异号数相加永远不会产生溢出

逐个选项验证

我们先把每个4位二进制补码转成十进制值,再计算判断:

选项A:1011 + 1001

  • 加数1:1011 对应十进制 -5,负数
  • 加数2:1001 对应十进制 -7,负数
  • 理论和:-5 + (-7) = -12,小于4位补码最小值-8,超出表示范围
  • 实际运算截断4位得到0100,对应十进制+4,两个负数相加得到正数,符号明显错误,产生溢出

选项B:1100 + 1101

  • 加数1:1100 对应十进制 -4,负数
  • 加数2:1101 对应十进制 -3,负数
  • 理论和:-4 + (-3) = -7,在-8 ~ +7范围内
  • 实际运算截断4位得到1001,对应十进制-7,结果正确,无溢出

选项C:0111 + 1000

  • 加数1:0111 对应十进制 +7,正数
  • 加数2:1000 对应十进制 -8,负数
  • 属于异号相加,天然不会溢出
  • 理论和:7 + (-8) = -1,运算结果为1111,对应十进制-1,结果正确,无溢出

选项D:1010 + 0110

  • 加数1:1010 对应十进制 -6,负数
  • 加数2:0110 对应十进制 +6,正数
  • 属于异号相加,天然不会溢出
  • 理论和:-6 + 6 = 0,运算截断4位得到0000,结果正确,无溢出

最终结论

只有选项A会产生溢出,你的错误就是把进位直接等同于补码溢出了,补码的进位不代表溢出,只有结果超出表示范围才算。
内容的提问来源于stack exchange,提问作者user16225412

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:18:02