题目描述
输入一个整数,输出该数二进制表示中1的个数。
拓展1:判断一个整数是不是2的整数次方;
拓展2:输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。
解题思路
这三道题目的整体思路均是:把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于把整数的二进制表示中的最右边的一个1变为0。
代码
/**
* 一个整数变为2进制后1的个数
* @param number
* @return
*/
public static int calNumberOf1InBinary(int number){
int count = 0 ;
while(number!=0){
++count;
number = (number - 1) & number;
}
return count;
}
/**
* 判断一个整数是不是2的整数次方
* @param number
* @return
*/
public static boolean isNumberPowerOf2(int number){
//一个整数如果是2的整数次方,则其二进制表示中仅有一位是1,其他位都是0
if(((number - 1) & number)==0){
return true;
}
return false;
}
/**
* 计算改变m的二进制表示中的多少位才能得到n
* @param m
* @param n
* @return
*/
public static int calNumberOfChangeBit(int m,int n){
int number = m ^ n;
int count = 0;
while(number!=0){
++count;
number = (number - 1) & number;
}
return count;
}