规律总结:
把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中最右边的一个1变为0.
题目1:
用一条语句判断一个整数是不是2的整数次方。
解决思路:
如果一个整数是2的整数次方,那么二进制表示中只有一位是1。将这个数减去1之后再与本身,结果为0则表示这个整数位2的整数次方。
bool func(int n)
{
return ((n-1)&n)==0;
}
题目2:
输入两个整数m,n。计算需要改变m的二进制表示中的多少位才能得到n。
思路:
先将m异或n,结果中1的个数即为改变的位数.
int func(int m,int n)
{
int temp = m^n;
int count = 0;
while(temp)
{
count++;
temp = (temp-1)&temp;
}
return count;
}