package com.ht.msra;
/**
* Created by IntelliJ IDEA.
* Desc:对于一个字节(8bit)的无符号整形变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能的高
* From:《编程之美》 p119
* Date: 2009-10-27
* Time: 9:38:13
*/
public class OneCountInBinary {
/**
* 解法1:通过除2和取余的方法,循环变量得到最终1的数量
* */
public static Integer get1CountByMod2(Byte b) {
int num =0;
while(b>0) {
if(((byte)(b%2))==1) {
num ++;
}
b = (byte)(b/2);
}
return num;
}
/**
* 解法2:通过与1和右移的方法,循环变量得到最终1的数量
* */
public static Integer get1CountByShift(Byte b) {
int num =0;
while(b>0) {
num += b & 0x01;
b = (byte)(b>>1);
}
return num;
}
/**
* 解法3:通过与上变量减1的方法,循环变量得到最终1的数量
* */
public static Integer get1CountByAndMinus1(Byte b) {
int num =0;
while(b>0) {
b = (byte)(b & (b-1));
num++;
}
return num;
}
/**
* int
* */
public static int getCount(int b){
int num =0;
while(b>0) {
num += b & 1;
b = b>>1;
}
return num;
}
public static void main(String[] args) {
Byte b = 22;
System.out.println("解法1:"+get1CountByMod2(b));
System.out.println("解法2:"+get1CountByShift(b));
System.out.println("解法3:"+get1CountByAndMinus1(b));
System.out.println("解法4:"+getCount(b));
}
}