中值计算为什么一般用left+(right-left)/2而不是(right+left)/2
left+(right-left)/2和(right+left)/2两个计算的结果是一样的,
但是
1、对于16位编译器,int占16位(2字节)。
int的最大值为32767.
2、对于32位和64位编译器,int占32位(4字节)。
int的最大值为2147483647
使用
(right+left)/2
当right+left的值超过int的最大值的时候就会溢出而轮不到/2哪怕/2后不会溢出
所以left+(right-left) 实际上限制了相加的两个数字的大小,不会造成溢出