没思路,C++怎么判断输入溢出?

int a(int x){
......
}

怎么判断x溢出?因为如果溢出,系统就自动处理了,到函数里就是一个没有溢出的数,我怎么在函数里判断x有没有溢出(超过int范围)?

阅读 6.2k
4 个回答

就像你说的.系统自动处理了没办法判断.
可以把int 改成long .这样就可以判断了..

a函数无法判断是否溢出,若是大于最大的int的值就变成负的了,若是小于最小的int的值就变成正数了。
只能在x溢出之前进行判断。
例如:
a + b 且 b > 0
if (INT_MAX - b < a) //overflow

int a(int x) {

static short flag = 0;// no static will gen xor code to clear the OF flag
__asm {
    pushf;
    pop flag;
}
if ((flag & 0x0800) > 0) {//check OF
    printf("overflow ");
}
printf("%d\n", x);
return x;

}

int main()
{

int q = 0x80008000;
int w = 0x80004000;
int r = q + w;
a(r);
q = 0x10000100;
w = 0x10004000;
r = q + w;
a(r);

system("pause");
return 0;

}
图片描述

思路:32位内联汇编判断OF标志位

你无法检测一个整数本身是否溢出,溢出是一个过程而不是结果。就像你无法知道一个时针指着1点的时钟,是本身出厂就指着1点,还是从1点转了一圈回到1点的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题