我注意到在.NET中,Array.BinarySearch(Array array, Object value)
方法使用following implementation来计算两个数字的平均值:
private static int GetMedian(int low, int hi)
{
return low + ((hi - low) >> 1);
}
我对此实施有两个问题:
为什么算术移位运算符明确使用?通过用算术移位替换它来优化除法是不是编译器工作?
为什么不简单地return (low + hi) >> 1;
?
答案 0 :(得分:3)
不确定,但也没有任何伤害。
这是为了防止binary search bug发生。
答案 1 :(得分:1)
(low + hi) > int.MaxValue
。答案 2 :(得分:0)