小编Ano*_*non的帖子

整数除法溢出

问题

我一直在考虑整数(类型int)溢出,并且我发现分裂可能溢出.

示例:在我当前的平台上,我有

INT_MIN == -INT_MAX - 1
Run Code Online (Sandbox Code Playgroud)

因此

INT_MIN < -INT_MAX
Run Code Online (Sandbox Code Playgroud)

因此

INT_MIN / -1 > -INT_MAX / -1
Run Code Online (Sandbox Code Playgroud)

因此

INT_MIN / -1 > INT_MAX.
Run Code Online (Sandbox Code Playgroud)

因此,除法(INT_MIN/-1)确实溢出.


问题

所以,我有两个问题:

  1. 可以编写什么(跨平台)C代码以防止除法溢出(对于类型(带符号)int)?

  2. 什么保证(在C或C++标准中)可能有助于设计代码?


例如,如果标准保证我们有

INT_MIN == -INT_MAX - 1
Run Code Online (Sandbox Code Playgroud)

要么

INT_MIN == -INT_MAX,
Run Code Online (Sandbox Code Playgroud)

然后出现以下代码以防止溢出.

#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) { …
Run Code Online (Sandbox Code Playgroud)

c c++ standards cross-platform integer-overflow

11
推荐指数
1
解决办法
3980
查看次数

标签 统计

c ×1

c++ ×1

cross-platform ×1

integer-overflow ×1

standards ×1