对于这种特殊情况,C或C++标准对有符号整数除法有什么规定?它有定义吗?以什么方式定义?
INT_MIN / -1 (0x8000_0000 / 0xFFFF_FFFF)
数学结果将是正值0x8000_0000,其在32位有符号2-补码中不可表示。
0x8000_0000
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-补码中不可表示。因此,这是有符号整数溢出的情况。在未定义行为的情况下,程序可以做任何事情。这包括返回任意结果、转储核心,甚至溢出缓冲区。
1条答案
按热度按时间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-补码中不可表示。因此,这是有符号整数溢出的情况。
在未定义行为的情况下,程序可以做任何事情。这包括返回任意结果、转储核心,甚至溢出缓冲区。