输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
十进制转成十六进制: | Integer.toHexString(int i) |
---|---|
十进制转成八进制 | Integer.toOctalString(int i) |
十进制转成二进制 | Integer.toBinaryString(int i) |
这3个函数都可以将十进制的整数转换成二、一六、八进制数 不过转换后的结果都是字符串的形式
思路:求负数的补码的方法。 注意: 负数的补码是在其原码的基础上,符号位不变,其余位取反,然后加1
public class Solution {
private int num;
private boolean flag = true;
private int target;
public int NumberOf1(int n) {
target = n;
if (n >= 0) {
char c[] = Integer.toBinaryString(n).toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == '1') {
num++;
}
}
return num;
}else {
return printComplementCode(n);
}
}
private int printComplementCode(int a)
{
for (int i = 0; i < 32; i++)
{
// 0x80000000 是一个首位为1,其余位数为0的整数
int t = (a & 0x80000000 >>> i) >>> (31 - i);
if (t == 1) {
num++;
}
}
return num;
}
}
欢迎关注我获得跟多资讯~