C - 检测无符号int溢出的加法

时间:2015-11-26 23:34:31

标签: c unsigned integer-overflow unsigned-integer

这是我的实现,用于检测在尝试添加两个数字时是否发生了无符号的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;
}

这似乎与我尝试过的价值观有关。

任何流氓案件?您认为利弊是什么?

1 个答案:

答案 0 :(得分:8)

您可以使用

if((a + b) < a)

关键是如果a + b溢出,结果将被修剪,并且必须低于a

考虑具有0 - >的假设边界范围的情况。 9(溢出10):

b最多可以是9。对于任何值aa + b >= 10(a + 9) % 10 < a 对于任何值aba + b < 10,因为b不是否定的,a + b >= a