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