分而治之算法实现的中点

Mid point in divide and conquer algorithm implementations

我见过许多使用下面的实现来找到两个索引的中点:

int mid = lo + (hi - lo) / 2;

而不是

int mid = (lo + hi) / 2;

从数学上讲,我看不出有什么区别,但是,我从未见过有人使用下面的那个。两者在计算上有区别吗?

32位有符号二进制整数在计算中存在最大正数

我们假设这个值为 100。

int lo = 60;
int hi = 80;

然后lo + hi = 60 + 80 = 140>100,这样做很危险,会导致integer overflow错误