输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
public class Solution {
public int NumberOf1(int n) {
int count = 0;
//每次循环划去末尾一个1。
// 1101&1100=1100
//1111&1110=1110
//1000&0111=0
//1011&1010=1010
//n-1 与n相比,n所退位的那位数字之后皆是0,之前的数字与n-1相同,而n-1退位的那一位为0.
//故n-1&n,会使得n中最末尾的1变成0
while (n != 0) {
++count;
n = (n - 1) & n;
}
return count;
}
}