正如在C和许多其他编程语言中定义的那样,这是整数除法中众所周知的不一致:除以整数N会得到范围为0..N而不是0..|N|的余数。IMO这会对某些应用程序产生负面影响,例如,如果您在整数网格上显示由定义的图像,则最好将(0,0)放在图像区域之外:否则,在某些图像操作中,您将在x==0和y==0得到一条可见线。
你能举一个实际的整数除法用法的例子,其中截断到0比截断到负无穷大更能满足编程意图吗?
发布于 2014-09-19 07:47:27
这不是编程语言设计的问题,真的。
高级编程语言为了与低级语言保持一致而截断。
低级语言会被截断,因为硬件操作就是这样做的。
后来的几代硬件选择向后兼容早期的几代。
要真正回答这个问题,你必须回到过去,原因可能像“它缩短了进位链”一样微妙。
但请注意,任何其他选择都会破坏分布性:
// 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都是很好保留的身份。
https://stackoverflow.com/questions/25922750
复制相似问题