首页
社区
课程
招聘
[求助]如何高效计算出整型数占用的二进制位数
2013-11-27 17:11 9039

[求助]如何高效计算出整型数占用的二进制位数

xhK 活跃值
3
2013-11-27 17:11
9039
如何高效计算出整型数占用的二进制位数,
例如:
2的二进制为 10,占用2个二进制位
3的二进制为 11,占用2个二进制位
4的二进制为 100,占用3个二进制位

怎么才能高效的计算呢

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (13)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whnet 2013-11-27 17:19
2
0
谁说2只占2位的?

你这应该说是:确定整数二进制表示中第一个1 的出现位置。
雪    币: 2122
活跃值: (358)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
疯子 4 2013-11-27 17:34
3
0
Hamming Weight
雪    币: 159
活跃值: (38)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
xhK 3 2013-11-27 17:34
4
0
对,应该这么说
雪    币: 441
活跃值: (149)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
rockhard 4 2013-11-27 17:46
5
0
最快?那查表!直接用你的数做数组索引,建一个大数组,个数是你想查最大的数。

数组前面几个值为

a[]=0 1 2 2 3 3 3 3 4
比如求8直接调用a[8]返回4

呵呵,牺牲空间换效率
雪    币: 1683
活跃值: (380)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
hackerlzc 10 2013-11-27 17:52
6
0
[log(x)] + 1
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DriverAsm 2013-11-27 17:54
7
0
左移 + 判断 ZF ?

对32位 二分查找。。。
雪    币: 1412
活跃值: (4133)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2013-11-27 18:05
8
0
32位 比较五次就够了吧,当然数学的方法也可以试试,。比如LOG之类的
雪    币: 250
活跃值: (463)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rocwings 2013-11-27 18:34
9
0
對數非常慢,比較法較快。
雪    币: 496
活跃值: (281)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
tishion 9 2013-11-27 19:15
10
0
int f(int n)
{
    n = (n&0x55555555) + ((n>>1)&0x55555555);
    n = (n&0x33333333) + ((n>>2)&0x33333333);
    n = (n&0x0f0f0f0f) + ((n>>4)&0x0f0f0f0f);
    n = (n&0x00ff00ff) + ((n>>8)&0x00ff00ff);
    n = (n&0x0000ffff) + ((n>>16)&0x0000ffff);

    return n;
}
雪    币: 799
活跃值: (1733)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
老伙计 2013-11-27 19:36
11
0
int f(int x)
{
  int n = 0 ;

  while(x) {
    x = x >> 1 ;
    n ++   ;
  }
  return(n) ;
}
雪    币: 1313
活跃值: (1190)
能力值: ( LV12,RANK:212 )
在线值:
发帖
回帖
粉丝
shuax 2 2013-11-27 21:36
12
0
http://graphics.stanford.edu/~seander/bithacks.html

这里有很多
雪    币: 159
活跃值: (38)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
xhK 3 2013-12-2 10:01
13
0
嗯 的确不少 多谢
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sjsme 2013-12-2 10:45
14
0
while(a) {a=a>>1,count++};
游客
登录 | 注册 方可回帖
返回