输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
关于补码的知识
对于负数的补码是其正数的二进制码然后按位取反后,在取反后的二进制码后面加一得到的负数的补码。而负数的补码的形式便是在计算机中存储的形式。
Java中的移位
左移<< ( 右移>>) 移位以后填充1还是0看最左端(最右端)的数字如果是1则填充1,如果是0的话则填充0.
所以判断一个二进制码当中存在多少个1的方法:1依次左移然后与n按位与如果结果为0则表示当前的值为1,否则的话表示为1,一直到1左移到全部为0为止。
public int NumberOf1(int n){
int flag = 1;
int count=0;
while(flag!=0){
if((n&flag)!=0){
count++;
}
flag = flag<<1;
}
}
更加取巧的方法
是n&(n-1) 这个方法经过测试,没经过一次这样的算法,便可以确定n最右边的一个1(注意这个是最右边的一个1),所以我们可以循环测试。
public int NumberOf1(int n){
int count = 0;
while(n!=0){
count++;
n=n&(n-1);
}
}