1.判断整数是不是2的整次方
int is_judge(int n)
{
if ((n&(n - 1))== 0)
return 1;
return -1;
}
解题思路:
一个整数如果是2的整次方,那么它的二进制有且仅有一个1,而其他位是0。所以可以把这个整数减1,那么这个1就会减掉,然后再取余。
2.输入两个整数m和n,计算需要改变m的二进制中的多少位才能得到n
解题思路:
如:10的二进制1010,而13的二进制1101,需要改变1010中的3位才能得到1101。分两步:先求两个数的异或,然后统计异或结果中1的个数。
int is_find(int n,int m)
{
int count = 0;
int ret = n^m;
while (ret){
count++;
ret &= (ret - 1);
}
return count;
}