二进制中1的个数
知识点:原码、反码、补码
正数的原码、反码、补码一样
负数的补码即 反码+1
题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解析
**方法1:**最优解:即有多少1 判断多少次
**方法2:**每次左移 1 比较每一位
**方法3:**使用 Integer.toBinaryString(n)
将十进制转换成二进制的字符串,然后和方法二类似
代码
- 最优解:即有多少1 判断多少次
public int NumberOf1(int n) {
int count = 0;
while (n != 0) {
count++;
n = (n - 1) & n;
}
return count;
}
- 每次左移 1 比较每一位
public int NumberOf1(int n) {
int count = 0;
int flag = 1;
while (flag != 0) {
if ((n & flag) != 0) {
count++;
}
flag = flag << 1;
System.out.println("flag:" + flag);
}
return count;
}
- 使用
Integer.toBinaryString(n)
将十进制转换成二进制的字符串,然后和方法二类似
public int NumberOf1(int n) {
int count = 0;
String result = Integer.toBinaryString(n);
int len = result.length();
for (int i = 0; i < len; i++) {
if (result.charAt(i) == '1')
count++;
}
return count;
}