二进制加法/减法

时间:2011-09-22 04:27:12

标签: binary overflow carryflag

我在理解进位标志(CF)和溢出标志(OF)时遇到了一些麻烦。

以下是我正在处理的一些示例问题:

1.  1011 1111    2.  1111 0111    3.  0111 1110  -->   0111 1110
  + 1011 0111      + 1101 1101      - 1011 0000  --> + 0100 1111
  ___________      ___________      ___________      +         1
    0111 0110        1101 0100                       ___________
                                                       1100 1110
  1. 符号位置的进位为1,进入符号位置为0,所以OF = 1?
  2. 符号位置的进位为1,进入符号位置为1,所以OF = 0?
  3. 符号位置的结转为0,符号位置的进位为1,所以OF = 1?
  4. 我想我无法理解无符号溢出和适当的CF值。

1 个答案:

答案 0 :(得分:2)

免责声明:我不是专家(甚至不是这一级代码的用户:))。

我认为进位标志对无符号数据有意义,溢出标志对有符号数据有意义。

两者都将始终生成,但由您来决定是否考虑无符号值或两个补码,因此您需要注意哪个标记。

来自:http://en.wikipedia.org/wiki/Overflow_flag

  

在内部,溢出标志通常由独占或内部进出符号位产生。由于符号位与被认为是无符号的数字的最高有效位相同,溢出标志是“无意义的”,并且在添加或减去这些数字时通常会被忽略。

符号位是最重要的位(最左边的位)。

独家或(XOR)是:

  • 如果两者:0
  • 如果:1
  • 如果两者:0

进入符号位是指第二个最高有效位在添加时产生一个值,转移到下一列。

执行是指在一起添加最高有效位(符号位,如果数字是二进制补码)时是否必须进位。

对这两个值进行异或,并且在给定添加后应该以溢出标志的值结束。