剑指offer-二进制中1的个数

时间:2023-02-14 13:44:54

题目描述
  输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
题目分析
  对一个二进制数减去1之后,这个数最右边1的变成0,而1之后的0全变成1,那么我们执行n&(n-1),就可以使最右边的1变成0,然后我们只需要统计这个过程进行了多少次,就可以统计这个数里面1有多少个
 

public class Solution {
public int NumberOf1(int n) {
int cnt = 0;
while(n!=0)
{
n = (n-1)&n;
cnt++;
}
return cnt;
}
}