Day73:二进制中1的个数

32 阅读1分钟

Day18 2023/01/25

题目链接

难度:简单

题目

输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。

数据范围:231<=n<=231−12^{31}<=n<=2^{31}−1231<=n<=231−1

即范围为:−2147483648<=n<=2147483647−2147483648<=n<=2147483647−2147483648<=n<=2147483647

示例

输入:10
返回值:2
说明:十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1。     
复制代码

思路一


遍历整数n二进制的每一位,如果为 1 则计数器加1,最后返回计数器。其中通过移位运算实现遍历每一位,通过按位与运算确定该位是否为1。 具体做法:

  • 遍历二进制的32位,通过向左移位运算。
  • 将移位后的1与数字n进行按位与运算,结果不为0,计数器就加1。
static void print(int num){
    int count = 0;
    for (int i = 31;i >= 0;i--){
        count += (num & (1 << i)) == 0 ? 0 : 1;
    }
    System.out.println(count);
}

新学会的把一个数的二进制全打出来

static void printBinary(int num){
    for (int i = 31;i >= 0;i--){
        System.out.print((num & (1 << i)) == 0 ? "0" : "1");
    }
    System.out.println();
}