深入解读 Java中的 Integer.bitCount(int i)源码
有很多人建议我在学习的过程中要养成写博客的习惯,遇到不懂的问题别人的博客都会讲解的很详细。一直想写但却有感觉有些耽误时间,刚好趁着十一假期老家一直在下雨有点时间,写篇博客充实下自己,顺便熟悉下markdown编辑器,嘻嘻嘻,之前没用过。
前几天我在牛客刷题的时候看到这样的一题:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
猛地一看很简单,没几分钟就写出了第一版的代码:
public class Solution {
public int NumberOf1(int n) {
int count=0;
while(n!=0){
count+=n&1;
n=n>>>1;
}
return count;
}
}
提交运行,通过所有的测试用例。
关于 count+=n&1
我们知道一个数计算机中所有的数都是以二进制形式呈现的,一个数是偶数那么它的最后一位一定是0,例如2=(byte)10 ,4=(byte)100,奇数的最后第一位一定是1,按位与上一个1奇数结果为1,偶数结果为0,不懂按位与的自行百度,讲的很详细。
关于n=n>>>1;
无符号右移高位补零,正负数都补零,这里就不讲移位运算了不懂的依然自行百度。
Java中的bitCount方法