首页 > 解决方案 > 如果减去二进制溢出怎么办

问题描述

我正在尝试做这个等式 -122 -(7),结果我得到 = 01111111

我对 -122 使用了 2 的补码并得到了 = 10000110。我对 7 使用了 2 的补码,所以我可以进行加法并得到 = 11111001。当我将两者相加时,我得到 = 01111111 和进位 1。我不这么认为是 -129 的正确答案

标签: binary

解决方案


忽略溢出位

位宽为 8 的二进制补码的范围为 [-128, 127]。

这个二进制数学显示 (-122) + (-7) 等于什么。

  122 =>    01111010
  7   =>    00000111

  -122 =>   10000110
  -7   =>   11111001
+         +
------    ----------
  127     1 01111111

01111111 => 127

在这个例子中,我们看到有一个溢出位指定-256。-256 超出 [-128, 127] 的 8 位范围。大多数实现都会删除这个溢出位,所以结果是127

延伸阅读

如果您好奇,还有其他 stackoverflow 答案可以更详细地研究二进制补码溢出。


推荐阅读