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

dvtswwa3  于 2023-05-16  发布在  C/C++
关注(0)|答案(1)|浏览(113)

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

INT_MIN / -1      (0x8000_0000 / 0xFFFF_FFFF)

数学结果将是正值0x8000_0000,其在32位有符号2-补码中不可表示。

llew8vvj

llew8vvj1#

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
如OP正确陈述的,数学结果将是正值0x8000_0000,其在32位有符号2-补码中不可表示。因此,这是有符号整数溢出的情况。
在未定义行为的情况下,程序可以做任何事情。这包括返回任意结果、转储核心,甚至溢出缓冲区。

相关问题