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 在某种情况下可能会超过基本类型所能容纳的最大值,而且 >>(位运算)要比 / 快一些