int low;
int high;
int mid;
1 常规写法:
mid = (low + high) / 2; // 两数较大的话,中间结果值(low + high)可能发生溢出
2 改进:
mid = low + (high - low) / 2; // 在较小数的基础上加上一个值,避免产生较大的中间值。显然 (high - low)/2 < high, high>=low>=0.
3 利用位运算进一步提高效率:
// 算术右移(高位补符号位) 1位相当于除以2。
mid = low + ((high - low) >> 1); // 移位操作一定要加圆括号,因为加法操作优先级高于移位操作。