(真)整数除法是否会出现上溢/下溢(假设分母不为0)?
由于该值总是保持不变或越来越小(因为在整数除法中,最小的绝对非零分母为1,因此结果永远不会大于分子),因此我认为不是。
/ p>
我正在或多或少地询问C / C ++标准,并且我对各种现代CPU架构在定义/未定义行为时如何处理整数除法感兴趣。
(真)整数除法是否会出现上溢/下溢(假设分母不为0)?
由于该值总是保持不变或越来越小(因为在整数除法中,最小的绝对非零分母为1,因此结果永远不会大于分子),因此我认为不是。
/ p>
我正在或多或少地询问C / C ++标准,并且我对各种现代CPU架构在定义/未定义行为时如何处理整数除法感兴趣。
由于值总是保持不变或变小...
这也是我过去的想法,但是当我们这么说时,我们悄悄地假设分母为正。
由于分母可以是负数,所以有一个晦涩但令人沮丧的情况:在2的补数算法下,INT_MIN / -1
的数学结果比INT_MAX
大一。
也就是说,在16位2的补码机上,INT_MIN
为−32768,可以很好地表示,但是−32768÷−1希望为+32768,而INT_MAX
仅为32767。同样,在32位中,-2147483648是可表示的,但也不能除以-1。
这是2的补码算法的一个特殊现象,是由于INT_MIN
的大小与INT_MAX
不太相同而引起的。另一方面,在一个补码或符号/幅度运算的条件下,INT_MIN
恰好是INT_MAX
的负数,因此没有“残忍的情况”,据我所知,对所有输入(当然,分母中为零)。