算法思想:
方法一:采用位操作。首先,判断这个数的最后一位是否为1,如果为1则计数器加1,然后,通过右移丢弃掉最后一位。循环执行该操作直到这个数等于0为止。在判断二进制表示的最后一位是否为1时,可以采用与运算来达到这个目的。时间复杂度O(n)
方法二:给定一个数n,每进行一次n&(n-1)计算,其结果中都会少了一位1,而且是最后一位。
方法一代码如下:
package com.haobi;
/*
* 如何求二进制中1的个数
*/
public class Test4 {
public static int Count(int n) {
int count=0;//计数器
while(n>0) {
if((n&1) == 1)//判断最后一位是否为1
count++;
n>>=1;//移位
}
return count;
}
public static void main(String[] args) {
System.out.println(Count(7));
System.out.println(Count(8));
}
}
程序输出结果如下:
3
1
方法二代码如下:
package com.haobi;
/*
* 如何求二进制中1的个数
*/
public class Test5 {
public static int Count(int n) {
int count=0;//计数器
while(n>0) {
if(n!=0) {//判断最后一位是否为1
n = n&(n-1);
count++;
}
}
return count;
}
public static void main(String[] args) {
System.out.println(Count(7));
System.out.println(Count(8));
}
}
程序输出结果如下:
3
1