算法题 — 整数转二进制,查找其中1的数量

2024-02-25 10:13:00 浏览数 (2)

题目

请实现一个函数(不限语言),输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。

代码语言:javascript复制
public class CountOnes {
    public static int countOnes(int num) {
        int count = 0;
        while (num != 0) {
            // 如果当前位为1,计数器加1
            if ((num & 1) == 1) {
                count  ;
            }
            // 将数字右移一位,继续检查下一位
            num = num >>> 1; // 无符号右移
        }
        return count;
    }

    public static void main(String[] args) {
        int num = 9; //1001
        System.out.println(  num   "中有 : "   countOnes(num) "个1"); 
    }
}

详细解读

  1. public class CountOnes {: 这行代码定义了一个名为 CountOnes 的公共类。
  2. public static int countOnes(int num) {: 这行代码定义了一个静态方法 countOnes,用于计算给定整数 num 中包含的二进制表示中的1的个数。它采用一个整数作为输入参数,并返回一个整数作为1的个数。
  3. int count = 0;: 这行代码声明了一个名为 count 的整数变量,用于记录1的个数。初始值为0。
  4. while (num != 0) {: 这行代码开始一个 while 循环,条件是 num 不等于0,即当 num 的二进制表示还有位时,继续执行循环。
  5. if ((num & 1) == 1) {: 这行代码检查 num 的最低位是否为1,它通过使用按位与运算符 & 和二进制数 1 来实现。如果最低位是1,则条件成立,计数器 count 增加1。
  6. num = num >>> 1;: 这行代码将 num 右移一位。>>> 是无符号右移操作符,它将 num 的所有位向右移动一位,并用0填充最高位。
  7. return count;: 这行代码返回计数器 count 的值,即1的个数。
  8. public static void main(String[] args) {: 这行代码定义了主方法 main
  9. int num = 9; //1001: 这行代码声明并初始化了一个名为 num 的整数变量,赋值为9。在二进制中,9表示为1001。
  10. System.out.println( num "中有 : " countOnes(num) "个1");: 这行代码调用 countOnes 方法来计算 num 中1的个数,并将结果打印到控制台。

0 人点赞