它是整数除法中众所周知的不一致,如C和许多其他编程语言中所定义的:除以整数N得到0..N范围内的余数而不是0 .. | N |。 IMO会对某些应用程序产生负面影响,例如,如果要显示由整数网格定义的图像,最好将(0,0)放在图像区域之外:否则,您将在x处获得可见线条在某些图像操作中,== 0和y == 0处的另一个。
你能说出一个实际整数除法用法的例子吗?截断为0会比截断到负无穷大更好地服务于编程意图?
答案 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
是保存的相当不错的身份。