问题
我一直在思考整数类型(int)溢出的问题,我发现除法也可能会导致溢出。
示例:在我的当前平台上,我有以下代码:
INT_MIN == -INT_MAX - 1
因此
INT_MIN < -INT_MAX
因此
INT_MIN / -1 > -INT_MAX / -1
因此
INT_MIN / -1 > INT_MAX.
因此,除法 ( INT_MIN / -1 ) 会溢出。
问题
因此,我有两个问题:
为了防止 (signed) int 类型的除法溢出,人们可以编写什么(跨平台)C代码?
C或C ++标准中有哪些保证可以帮助设计代码?
例如,如果标准保证我们要么有
INT_MIN == -INT_MAX - 1
或者INT_MIN == -INT_MAX,
然后出现了以下代码以防止溢出。
#include <limits.h>
/*
Try to divide integer op1 by op2.
Return
0 (success) or
1 (possibly overflow prevented).
In case of success, write the quotient to res.
*/
int safe_int_div(int * res, int op1, int op2) {
/* assert(res != NULL); */
/* assert(op2 != 0); */
if ( op1 == INT_MIN && op2 == -1 ) {
return 1;
}
*res = op1 / op2;
return 0;
}
if (!op2) return 2
的内容,你就可以解决另一个除法问题 :) - Sir Jo Black