首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > Apache >

#Lucene# org.apache.lucene.util.BitUtil.pop(long x) 札记

2012-06-28 
#Lucene# org.apache.lucene.util.BitUtil.pop(long x) 笔记今天读 Lucene 源码,有这样一个函数: 之后x0

#Lucene# org.apache.lucene.util.BitUtil.pop(long x) 笔记

今天读 Lucene 源码,有这样一个函数:

; 之后
x=0x08101010
再经过x = x + (x >>> 16);之后
x=0x08101820
最后return x & 0x0000003F;
result=0x00000020
可以看到结果是正确的。

具体的原因就是因为32位整数,所有1的个数加起来不会超过0x3F,而64位中1的个数不会超过0x7F,也就是结果最多不过7位。
到移动8位的时候,结果已经聚集到低位来了,高位的结果不会对低位造成影响,所以不用再做额外的与运算。

热点排行