溢出并带有三个加数的标志

时间:2014-08-09 14:54:30

标签: c

我正在用C编写一个项目。

我需要检查在进行加法,减法,除法和乘法时是否应该设置CARRY或OVERFLOW位。我唯一的问题是我必须用三个加数来做。例a = a + b + c。

检查这两位是否应该设置的最简单方法是什么?

编辑:我必须编写一个系统,在每个操作之后设置这些标志。所有数字都是有符号整数。

编辑2:我对两个整数的解决方案:

#define MAXINT 32767

short int a, b, c;
short int i, j, k;

if (MAXINT - a < b) // carry

i=a; i>>15; i&=0x01;
j=b; j>>15; j&=0x01;
c=a+b;
k=c; k>>15; k&=0x01;
if(i==j && i!=k) //overflow

1 个答案:

答案 0 :(得分:0)

在C中,使用shortintlong,假设溢出从不。编译器利用了这一点,因此可能不会像在溢出后期望那样表现。为了真正可移植,代码必须确保不会发生溢出。

我们只使用2个变量:ab

#include <limits.h>
int safe_add(int a, int b) {
  if (a >= 0) {
    if (b > INT_MAX - a) {
      ; /* handle overflow */
    }
  } else {
    if (b < INT_MIN - a) {
      ; /* handle underflow */
    }
  }
  return a + b;
}

https://codereview.stackexchange.com/questions/37177/simpler-method-to-detect-int-overflow