加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:25:40 所属栏目:百科 来源:网络整理
导读:如何最有效地计算C#中整数(日志基数2)所需的位数?例如: int bits = 1 + log2(100);= bits == 7 解决方法 在代码行或运行时执行速度方面的效率? 代码很简单:Math.log(n,2). 运行速度有点棘手,但你可以用一种“二进制搜索”来实现: int bits = 1;for (int
如何最有效地计算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级开始

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读