left + ((right - left) >> 1) == (left+right) / 2
(右移操作符):将一个操作数按指定移动的位数向右移动,右边移出位被丢弃,左边移出的空位补符号位。
例子:1010 >> 1 = 0101
1010 十进制 10
0101 十进制 5
1相当于除以2,即 (right-left) >> 1 = (right-left) / 2
所以 left+ (right-left) >> 1 = left + (right-left) / 2 = (left+right) / 2
问题:为什么不直接用 (left+right) / 2 而用 left+ (right-left) ?
因为 left+right 在某种情况下可能会超过基本类型所能容纳的最大值,而且 >>(位运算)要比 / 快一些