题目
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
数据范围:- 2^{31} <= n <= 2^{31}-1−2
31
<=n<=2
31
−1
即范围为:-2147483648<= n <= 2147483647−2147483648<=n<=2147483647
解法一
public class Solution {
public int NumberOf1(int n) {
int ans = 0;
//遍历整个n,n>>i 后与1与
for(int i = 0; i < 32; i++){
ans += ((n >> i) & 1);
}
return ans;
}
}
解法二
import java.util.*;
public class Solution {
public int NumberOf1(int n) {
//1.n&1判断n最低位是否为1
//2.n >>>1;n右移并且最高位补0
int ans = 0;
while(n != 0){
ans += n & 1;
n >>>= 1;
}
return ans;
}
}