(true)整数除法是否会出现上溢/下溢(假设分母不为0)?
由于该值始终保持不变或越来越小(因为在整数除法中,最小的绝对非零分母为1,因此结果永远不会大于分子),因此我认为不会。
我在C / C ++标准的上下文中或多或少地询问,我对各种现代CPU体系结构在定义/未定义行为时如何处理整数除法感兴趣。
由于值总是保持不变或变小...
这也是我过去的想法,但是当我们这么说时,我们悄悄地假设分母为正。
而且由于分母可以为负,所以有一个晦涩但毁灭的情况:在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
,因此没有“残忍的情况”,据我所知,对所有输入都很好地定义了除法(除,分母中的零除外) , 当然)。