给你一个数组 arr ,取 [l, r] 范围内的中间值,很简单吧,直接 arr[(l + r) / 2] ?大错特错,这里的 l + r 具有潜在的安全隐患,即可能会在某些情况下溢出,即 l + r > Integer.MAX_VALUE

# 方法一:l + (r - l) / 2

这样可以使用 r - l 来降低操作数的大小,避免了出现溢出问题

# 方法二:l + ((r - l) >> 1)

相较于法一主要是使用了位运算符,有助于提高运算速度