输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解题思路:
该问题如果使用的是,第一反应中想到的向右移,然后判断target是否为0的方法,会因为负数造成oom。
因此,使用n & (n - 1) 的方式;将一个数减去1,再与原来的数做与运算会将原来的数的最后一位变成0,因此,有多少个1就可以进行多少次这样的运算。
java
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while (n != 0) {
count++;
n = n & (n - 1);
}
return count;
}
}
(1)判断一个数是否为2的整数次方;
(2)判断m,n两个数需要经过多少次运算才能变为同样的数;