我的小c程序有问题。
如果发生溢出,我试图打印出警告,我使用limits.h库来识别INT_MAX的溢出。 我想问题出在我的if循环中,但我无法找到问题...
#include<stdio.h>
#include<limits.h>
int main()
{
int x = 1627964;
int y = 9;
for(int i=1; i<y; ++i){
x*= i; // x= x * i
printf("%d * %d \n",x , i+1);
if(x >= INT_MAX){
printf("An Overflow has occured!\n");
return 0;
break;
}
}
}
我认为在乘以7后会发生溢出:
1627964 * 2
3255928 * 3
9767784 * 4
39071136 * 5
195355680 * 6
1172134080 * 7
-384996032 * 8
1214999040 * 9
我无法告诉为什么警告没有打印出来......
非常感谢一些帮助,谢谢:)
答案 0 :(得分:0)
只有unsigned int定义了溢出行为,signed int没有定义,所以如果检测到代码,编译器可能会丢弃一半代码。无论如何,在你的代码中,int永远不会大于INT_MAX,因为在溢出时它应该是负值。
答案 1 :(得分:0)
如果你尝试int max / i&lt; x为溢出?
答案 2 :(得分:-3)
x == INT_MAX
仅测试x
完全相等至INT_MAX
。不少于,不多于,完全相同。
你应该测试的是有符号整数溢出,当你乘以1627964乘以8时会发生这种情况:if (x==INT_MAX || x < 0)
- 符号位递增,这会使你的值为负。