我的问题是在概念方面。
背景
唐纳德克努特曾经提到过一个案例,有时他的合并排序有时会失败。后来他发现这是因为在尝试找到两个整数之间的中间值时超出了最大值。
代码必须改变:
int mid = (left + right) / 2;
到此:
int mid = left + (right-left)/2;
我的问题:
我只是好奇为什么Java不会抛出溢出错误而不是静默返回意外结果。我认为程序故意继续错误的结果只是语义错误。
我在这里想到的一个可能的论点是位操作的上下文。在执行二进制操作时合并溢出错误可能太麻烦了。
但我仍然认为,如果是这种情况,那么当使用诸如+, - ,*,/等算术运算时,Java应该抛出溢出错误,并且当仅处理诸如>之类的二进制运算时忽略溢出错误。 >,>>>,<<,等。
不确定其他编程语言,但我怀疑它非常相似。如果我错了,请纠正我。
那么,这背后的任何推理?
编辑:
正如Luiggi所指出的,这是一个重复的问题。我在那里给定的链接中得到了我的答案。