读书人

#Lucene# org.apache.lucene.util.Bit

发布时间: 2012-06-28 15:20:04 作者: rapoo

#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位的时候,结果已经聚集到低位来了,高位的结果不会对低位造成影响,所以不用再做额外的与运算。

读书人网 >Apache

热点推荐