背景
计算两数的中点,使用 int mid = (left + right) / 2 求mid时,可能 left + right 时就发生溢出,导致mid的结果也不正确
解决办法
int mid = left + (right - left) / 2
right - left肯定是不溢出的, (right - left) / 2就不会溢出,由于left + (right - left) / 2 = left / 2 + right / 2 < right / 2 + right / 2 = right,因此也可以看出left + (right - left) / 2 不溢出。
- 可使用位运算提高运算效率
int mid = left + ((right - left) >> 1)