负数用32位的补码表示
正数:原码==反码==补码
负数:反码:原码符号位不变,其余位取反;补码:反码加1
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
示例1
输入
复制
10
返回值
复制
2
第一种流氓解法
借助Integer.toBinaryString(n)转换为二进制字符串
public int NumberOf1(int n) {//负数用补码表示
// 1、首先求出负数的原码,如-8的原码为 1000 1000,
// 2、通过原码求出它的反码,负数的反码就是 除符号为以外,其余的全部求反,如-8 反码为 1111 0111,
// 3、负数的补码 +1,就是它的补码,如 -8 的补码为 1111 1000
//
// 总结 一句话就是 负数的补码是在原码的基础上除符号位外其余位取反后+1String s=Integer.toBinaryString(n);int num=0;for(int i=0;i<s.length();i++){if(s.substring(i,i+1).equalsIgnoreCase("1")){num+=1;}}return num;}