我正在用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
答案 0 :(得分:0)
在C中,使用short
或int
或long
,假设溢出从不。编译器利用了这一点,因此可能不会像在溢出后期望那样表现。为了真正可移植,代码必须确保不会发生溢出。
我们只使用2个变量:a
,b
。
#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