C语言实现两个int(32位)整数x和y的二进制表达中有多少个位(bit)不同?

代码如下:

int test(int x,int y){    //方法一: 分别比较x和y二进制中每一位是否相同
	int num = 0;                         
	for (int i = 0; i < 32; i++){ 
		if (((x >> i) & 1) != ((y >> i) & 1)){
			num++;
		}
	}
	return num;
}
int test1(int x, int y){    //  取变量ret 并赋值为 x^(异或)y的值,即x和y二进制中不同的个数,但是这数是int型
	int ret = x ^ y;     
	int num = 0;
	while (ret){      // 将int型的ret不断和(ret-1)相与,直到ret = 0,循环的次数就是ret中1的个数,即x和y中bit不同的个数
		num++;
		ret = ret & (ret - 1);}
				
	return num;
}
int main(){
	int x, y;
	scanf("%d%d", &x, &y);
	printf(" %d\n", test(x, y));
	printf(" %d\n", test1(x, y));
	return 0;
}

输出结果如下:
在这里插入图片描述

发布了27 篇原创文章 · 获赞 10 · 访问量 686

猜你喜欢

转载自blog.csdn.net/m1059247324/article/details/102761098