假设分母<> 0,整数除法会发生上溢/下溢吗?

(真)整数除法是否会出现上溢/下溢(假设分母不为0)?

由于该值总是保持不变或越来越小(因为在整数除法中,最小的绝对非零分母为1,因此结果永远不会大于分子),因此我认为不是。

/ p>

我正在或多或少地询问C / C ++标准,并且我对各种现代CPU架构在定义/未定义行为时如何处理整数除法感兴趣。

gg85806539 回答:假设分母<> 0,整数除法会发生上溢/下溢吗?

  

由于值总是保持不变或变小...

这也是我过去的想法,但是当我们这么说时,我们悄悄地假设分母为

由于分母可以是负数,所以有一个晦涩但令人沮丧的情况:在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的负数,因此没有“残忍的情况”,据我所知,对所有输入(当然,分母中为零)。

本文链接:https://www.f2er.com/3093756.html

大家都在问