题目:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
思路:
二进制数每位挨个和 1 (左移后其实不是1了,如:000100 ) 做与(&)运算,结果不是零则count++
public class Solution {
public int NumberOf1(int n) {
if(n == 0)
return 0;
int count = 0;
int temp = 1;
while(temp != 0){
if((temp & n) != 0)
count ++;
temp = temp << 1;
}
return count;
}
}
如果移位的不是 1 而是 n 的话,要注意负数(补码)向右移位时最左端会补1,这样就死循环了,解决方法时把 n = n >> 1 改成 n = n >>>1,">>>" 无视符号位移位
public class Solution {
public int NumberOf1(int n) {
if(n == 0)
return 0;
int count = 0;
while(n != 0){
if((n & 1) == 1)
count++;
n = n >>> 1; // 无视符号位右移
}
return count;
}
}