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

时间:2022-11-22 07:23:52


题干

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
关键字:进制转化,补码反码原码

我的思路

在看解析之前,完全没思路,沉住气直接看解析吧。

大佬解析

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

public class Solution {
public int NumberOf1(int n) {
int num = 0, flag = 1;
while (flag != 0) {
if ((n & flag) != 0) {
num++;
}
flag <<= 1;
}
return num;
}
}

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

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

总结

java遇到这种进制转化,反码补码的问题,要想到<< 移位运算符,要知道正负数移位的结果。
与运算:n与“1”进行与运算,可以得出是不是n中含有1,再对1进行移位,可以知道每个位置是不是含有1.