
java中的Integer类里面的bitCount方法是不是统计int i的二进制补码里面有几个1,这个方法内容帮忙解释 30
publicstaticintbitCount(inti){//HD,Figure5-2i=i-((i>>>1)&0x55555555);i=(i&0x33333333)...
public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
} 展开
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
} 展开
2个回答
展开全部
bitCount 方法是用来统计参数i转成2进制后有多少个1 而不是统计补码有多少个一。
方法也大致解释下 能看懂就扩展下自己的思路,不懂的话就记住吧。
i = i - ((i >>> 1) & 0x55555555); 把i的二进制 两位一组统计1的数目
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);把刚才的结果4位一组 统计 1的数目
i = (i + (i >>> 4)) & 0x0f0f0f0f; 8位1组统计
i = i + (i >>> 8); 16位一组统计 结果放在 后8位
i = i + (i >>> 16); 32位1组统计 结果放在 后16位
整数固定是32位
i & 0x3f 由于8位以上统计时 并没有过滤掉高位的数字,所以在这里过滤掉无效的数字。得到含有1的数目
方法也大致解释下 能看懂就扩展下自己的思路,不懂的话就记住吧。
i = i - ((i >>> 1) & 0x55555555); 把i的二进制 两位一组统计1的数目
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);把刚才的结果4位一组 统计 1的数目
i = (i + (i >>> 4)) & 0x0f0f0f0f; 8位1组统计
i = i + (i >>> 8); 16位一组统计 结果放在 后8位
i = i + (i >>> 16); 32位1组统计 结果放在 后16位
整数固定是32位
i & 0x3f 由于8位以上统计时 并没有过滤掉高位的数字,所以在这里过滤掉无效的数字。得到含有1的数目
2013-05-07
展开全部
这个应该是不对的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询