题目
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
题解
val :1101000,
val-1: 1100111
那么val & (val-1) : 1100000
一次操作就代表找到了一个1并且将它化为0
接着继续循环判断,直到该数变为0;
public class Solution {
public int NumberOf1(int n) {
int ans = 0;
while(n != 0){
ans++;
n = n & (n-1);
}
return ans;
}
}