题目描述
-
位运算:
因为除法的效率比移位运算要低得多,在实际编程中应尽可能地用移位运算符代替乘除法。 -
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1,即应输出2.
-
解法:
- 把一个整数减去1后再和原来的数做&运算,得到的结果相当于把整数的二进制中最右边的1变成0.
private static int intNumberOf1(int n){
// 注意防止负数右移出现死循环
int count = 0;
while(n!=0){
if((n&1)==1)
count++;
// 无符号左移
n >>>= 1;
}
return count;
}
private static int intNumberOf2(int n){
int count = 0;
while(n!=0){
n = n&(n-1);
count++;
}
return count;
}