求两个数二进制中不同位的个数

编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?

思路:

  1. 先将m和n进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1
  2. 统计异或完成后结果的二进制比特位中有多少个1即可
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int 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;
	printf("请输入两个数字: ");
	scanf("%d %d", &m, &n);
	int ret = diff_bit(m, n);
	printf("ret=%d\n", ret);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45658339/article/details/108590426