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

Qix*_*Qix 8 c division integer-division undefined-behavior

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

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

我在C / C ++标准的上下文中或多或少地询问,我对各种现代CPU体系结构在定义/未定义行为时如何处理整数除法感兴趣。

Ste*_*mit 9

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

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

而且由于分母可以为负,所以有一个晦涩但毁灭的情况:在2的补数算法下,的数学结果INT_MIN / -1是一个大于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,因此没有“残忍的情况”,据我所知,对所有输入都很好地定义了除法(除,分母中的零除外) , 当然)。

  • @pmg是的,但它“想成为”;) (3认同)
  • @Kaz您没有看到pmg评论的措辞。(检查历史记录。) (2认同)