请实现一个函数(不限语言),输入一个整数,输出该数二进制表示中 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的个数,并将结果打印到控制台。