package com.accp;
/**
* 求二进制数中1的个数
*
* @author Administrator
*
*/
public class BinaryConversion {
/**
* 解法一 通过相除和判断余数的值的方法计算
*
* @param num
* 传入的数字
* @return 二进制数1的个数
*/
public static int CountOne(int num) {
int counter = 0;
while (num > 0) {
if (num % 2 == 1) {
counter++;
}
num = num / 2;
}
return counter;
}
/**
* 解法二 位操作
*
* @param num
* @return
*/
public static int Counttow(int num) {
int counter = 0;
while (num > 0) {
counter += num & 0X01;
num >>= 1;
}
return counter;
}
/**
* 解法三
*
* @param num
* @return
*/
public static int CountThree(int num) {
int counter = 0;
while (num > 0) {
num = num & (num – 1);
counter++;
}
return counter;
}
省略:
// 解法四:分支操作
// 解法五:查表法
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
System.out.println(CountOne(5));// 结果:2
System.out.println(CountThree(31));// 结果:5
System.out.println(Counttow(32));// 结果:1
}
}