n&(n-1) 将 n 的二进制表示中的最后一个1消掉
解题类型:
1、求一个数二进制表示中1的个数
2、判断一个整数是否是2的整次方(2的整次方:二进制表示只有一个1,其余为0)
3、求两个数 m 和 n ,m 需要改变多少位才可以变成 n (如 10是1010,11是1011,需要改变1位)
3.1、异或:同为0,不同为1,所以 m 和 n 异或,可以求出二进制表示中,不同的位数有多少,即有多少个1
3.2、再判断异或结果有多少个1
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0){
count++;
n = n&(n-1);
}
return count;
}
}