这是我的实现,用于检测在尝试添加两个数字时是否发生了无符号的int溢出。
我系统上unsigned int(UINT_MAX)的最大值是4294967295。
int check_addition_overflow(unsigned int a, unsigned int b) {
if (a > 0 && b > (UINT_MAX - a)) {
printf("overflow has occured\n");
}
return 0;
}
这似乎与我尝试过的价值观有关。
任何流氓案件?您认为利弊是什么?
答案 0 :(得分:8)
您可以使用
if((a + b) < a)
关键是如果a + b
溢出,结果将被修剪,并且必须低于a
。
考虑具有0 - >的假设边界范围的情况。 9(溢出10):
b
最多可以是9。对于任何值a
,a + b >= 10
,(a + 9) % 10 < a
对于任何值a
,b
,a + b < 10
,因为b
不是否定的,a + b >= a
。