c/c++是否定义有符号整数除法的结果:负极值除以负1(INT_MIN/-1)

Mob*_*erg 6 c c++ language-lawyer

对于这种特殊情况,C 或 C++ 标准对有符号整数除法有何规定?它是否定义以及以何种方式定义?

INT_MIN / -1      (0x8000_0000 / 0xFFFF_FFFF)
Run Code Online (Sandbox Code Playgroud)

数学结果将是0x8000_0000无法用 32 位带符号 2 补码表示的正值。

小智 3

C 标准 [1] 和 C++ 标准 [2] 都规定有符号整数溢出会导致未定义的行为

[1]: https: //www.gnu.org/software/autoconf/manual/autoconf-2.63/html_node/Integer-Overflow-Basics.html

[2]:https://en.cppreference.com/w/cpp/language/operator_arithmetic#Overflows

正如OP正确指出的那样,数学结果将是正值0x8000_0000,它不能用32位有符号2补码表示。因此,这是有符号整数溢出的情况。

如果行为未定义,程序可以执行任何操作。这包括返回任意结果、转储核心,甚至溢出缓冲区。