目录
1.题目描述
描述
输入描述:
输出描述:
示例1
2.解题思路
3.解题代码
4.思路二
1.题目描述
描述
输入两个整数,求两个整数二进制格式有多少个位不同
输入描述:
两个整数
输出描述:
二进制不同位的个数
示例1
输入:
22 33复制输出:
5
2.解题思路
思路①:利用^操作符
任何数的二进制位都是由0.1组成
比如1
00000000 00000000 00000000 00000001
2的二进制位表示:
00000000 00000000 00000000 00000010
1和2有两位不同
^:相同为0,相异为1
我们只用记录1的个数就可得出结果
3.解题代码
int main() {
int a, b;
scanf("%d %d",&a,&b);
int c = a^b;//相同为0相异为1
int count = 0;
int i = 1;
while (i<=32)
{
if((c&1)==1)
{
count++;
}
c = c >> 1;
i ++;
}
printf("%d\n", count);
}
4.思路二
1. 先将m和n进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1 2. 统计异或完成后结果的二进制比特位中有多少个1即可
#include <stdio.h>
int calc_diff_bit(int m, int n)
{
int tmp = m^n;
int count = 0;
while(tmp)
{
tmp = tmp&(tmp-1);
count++;
}
return count;
}
int main()
{
int m,n;
while(scanf("%d %d", &m, &n) == 2)
{
printf("%d\n", calc_diff_bit(m, n));
}
return 0;
}