题目:输入一个普通的整形数字,将整形数据转换成二进制数,并返回二进制数字中1的个数,比如输入9,那么二进制是1001,返回2
下面使用的是两种方式来实现的,第一种的效率比较低,第二种的效率比较高
package 剑指offer;
/*题目:实现一个函数,输入整数,将整数转化成二进制数
*然后求出此二进制数中1的个数,并返回,比如说是9,二进制1001
*其返回的就是2*/
public class Test10 {
public static void main(String args[]){
System.out.println("9的结果是:"+BinaryNamber1(9));
System.out.println("9的结果是:"+BinaryNamber2(9));
}
public static int BinaryNamber1(int num){
//这是一种比较常规的方法,每个int型是由4字节32位组成的
int result = 0;
for(int i = 0; i < 32; i++){
if((num&1) != 0)
result++;
num = num >>> 1;
}
return result;
}
public static int BinaryNamber2(int num){
//这是一种效率比较高的方式,每次使用减一的方式来消除后边最右边的一个一
int result = 0;
while(num != 0){
result++;
num = num&(num - 1);
}
return result;
}
}
越努力,越自信