在C#中计算整数的log2的最快方法是什么?

前端之家收集整理的这篇文章主要介绍了在C#中计算整数的log2的最快方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何最有效地计算C#中整数(日志基数2)所需的位数?例如:
int bits = 1 + log2(100);

=> bits == 7

解决方法

代码行或运行时执行速度方面的效率?

代码很简单:Math.log(n,2).

运行速度有点棘手,但你可以用一种“二进制搜索”来实现:

int bits = 1;
for (int b = 16; b >=1; b/=2)
{
  int s = 1 << b;
  if (n >= s) { n>>=b; bits+=b; }
}

我不是100%确定我有逻辑,但希望这个想法很清楚. .NET VM中可能会有一些开销,但原则上应该更快.

for循环初始化器中的16是基于int所需的位数的一半.如果您正在使用多种方式,请在32级开始

猜你在找的C#相关文章