计算两个数的算术平均值(平均值):优化的含义是什么?

时间:2014-04-12 09:59:12

标签: c# .net optimization average mean

我注意到在.NET中,Array.BinarySearch(Array array, Object value)方法使用following implementation来计算两个数字的平均值:

private static int GetMedian(int low, int hi)
{
    return low + ((hi - low) >> 1);
}

我对此实施有两个问题:

  1. 为什么算术移位运算符明确使用?通过用算术移位替换它来优化除法是不是编译器工作?

  2. 为什么不简单地return (low + hi) >> 1;

3 个答案:

答案 0 :(得分:3)

  1. 不确定,但也没有任何伤害。

  2. 这是为了防止binary search bug发生。

答案 1 :(得分:1)

  1. 没理由。也许是为了确保编译器能够正常工作。
  2. (low + hi) > int.MaxValue
  3. 时避免算术溢出

答案 2 :(得分:0)

  1. 程序员已经选择使用最佳代码。
  2. (低+ hi)可能导致整数溢出。