【发布时间】:2014-05-26 13:39:49
【问题描述】:
我注意到在 .NET 中,Array.BinarySearch(Array array, Object value) 方法使用 following implementation 来计算两个数字的平均值:
private static int GetMedian(int low, int hi)
{
return low + ((hi - low) >> 1);
}
我对这个实现有两个问题:
为什么要显式使用算术移位运算符?通过用算术移位替换除以 2 来优化除以 2 不是编译器的工作吗?
为什么不直接
return (low + hi) >> 1;?
【问题讨论】:
-
也许同样的代码不仅用于具有完整 JIT 编译器的普通 .NET 框架,而且还用于 .NET Micro,这种优化可以使事情变得更快。
-
另外,当
low和hi相差1时,>> 1和/ 2会产生不同的结果。可能一个结果比另一个更好(也许只是在那个程序员的眼中)。
标签: c# .net optimization average mean