首页 > 解决方案 > 8位无符号数加减溢出

问题描述

我很难理解在未单独的加减法中何时发生溢出。例如,

   1 1 1 1 0 0 0 0 
+  0 0 1 1 1 0 0 0 
  __________________
   0 0 1 0 1 0 0 0 

由于 MSB 中的 1,它导致溢出。我理解这个问题,但是当它进行减法时,我无法确定它何时溢出

例如,

   0 0 0 0 0 0 0 1               
-  0 0 0 0 0 0 1 1   

(应用 2 的补码后)

   0 0 0 0 0 0 0 1 
+  1 1 1 1 1 1 0 1

   1 1 1 1 1 1 1 0 

因此结果应该是“没有溢出”,因为最后没有执行 1。但是,答案是“溢出”。你能告诉我为什么吗?

标签: mathbit-manipulationunsigned

解决方案


我可能会称这个underflow not overflow

像这样想。您正在尝试计算x - y。使用二进制补码,您将其实现为x + (2 N - y ) = 2 N + ( x - y )。因此,只有在溢出进位位 2 N从左侧掉出时,结果才会正确表示 ( x - y )。否则,您得到的结果是负减法结果的二进制补码表示。


推荐阅读