为什么整数除法截断为0而不是负无穷大?

时间:2014-09-18 21:34:21

标签: language-agnostic integer programming-languages language-lawyer language-design

它是整数除法中众所周知的不一致,如C和许多其他编程语言中所定义的:除以整数N得到0..N范围内的余数而不是0 .. | N |。 IMO会对某些应用程序产生负面影响,例如,如果要显示由整数网格定义的图像,最好将(0,0)放在图像区域之外:否则,您将在x处获得可见线条在某些图像操作中,== 0和y == 0处的另一个。

你能说出一个实际整数除法用法的例子吗?截断为0会比截断到负无穷大更好地服务于编程意图?

1 个答案:

答案 0 :(得分:4)

这不是编程语言设计的问题,实际上。

高级编程语言会截断,以便与低级语言保持一致。

低级语言被截断,因为这是硬件操作的作用。

后代硬件选择向后兼容早期。

要真正回答这个问题,你必须回到原点,其原因可能与“它使得链条更短”一样微妙。

但请注意,任何其他选择都会打破分配:

// both of these are true if integer division truncates toward zero, else uncertain
-1 * b / c == -1 * (b / c)
-1 * b % c == -1 * (b % c) % c

是保存的相当不错的身份。