中值计算为什么一般用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) 实际上限制了相加的两个数字的大小,不会造成溢出

posted @ 2023-09-13 18:29  橡皮筋儿  阅读(33)  评论(0编辑  收藏  举报