
目录
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;
} 


















