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补码表示。因此,这是有符号整数溢出的情况。
如果行为未定义,程序可以执行任何操作。这包括返回任意结果、转储核心,甚至溢出缓冲区。
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |