二进制中1的个数
题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示
解题思路
解法一
将被测试数字与数字1作按位与运算,根据运算结果得出被测试数字最低位是否为1。循环作右移操作,使被测试数字的32个二进制位逐一作为最低位
解法二
n & (n - 1)
的结果是n的最右边1变为0,能做多少次操作则有多少个1
代码
解法一
public class Solution {
public int NumberOf1(int n) {
int count = 0;
int andNumber = 1;
for(int i = 0; i < 32; i++) {
int testResult = n & andNumber;
if(testResult == 1) {
count++;
}
n >>= 1;
}
return count;
}
}
解法二
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0) {
count++;
n = n & (n - 1);
}
return count;
}
}
PREVIOUS剑指Offer 面试题09-4:矩形覆盖