题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
答案
public class Solution {
public int NumberOf1(int n) {
int ans = 0;
while (n != 0) {
n = n&(n-1);
ans++;
}
return ans;
}
}
解析
第一种方法是用1和输入的数字从右至左依次做&运算,当不为0的时候计数+1
第二种方法是跟它本身减一做与运算,可以省去不必要的比较判断
例子:现考虑二进制数:val :1101000, val-1: 1100111 那么val & (val-1) : 1100000
Comments | NOTHING