当前位置: 代码迷 >> 综合 >> 11:二进制中1的个数
  详细解决方案

11:二进制中1的个数

热度:14   发布时间:2023-09-29 22:43:39.0

 

负数用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;}

 

 

  相关解决方案