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