C语言:求两个数二进制中不同位的个数

题目:

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

              

输入例子 :

1999 2299

               

输出例子 : 7

                    

 =========================================================================

                       

思路:

总体思路:

m 异或 n 后,有几个相异就有几个1,再计算下二进制有几个1即可

          

(1). 编写函数:number_of_1() 计算二进制中有几个1

               

(2). 在主函数中,把 m ^ n (m 异或 n)的结果作为参数传给 number_of_1() 函数

                


                 

第一步:

编写函数:number_of_1() 计算二进制中有几个1

           

(1). 函数返回值:int 返回二进制中1的个数

函数形参:int m

                   

(2). 设置计数器 count统计二级制中 1 的个数

             

(3). 使用 while循环,循环统计,只要m不为0就继续循环

              

(4). 使用 m = m & (m - 1); -- 去掉二进制中最右边的1,再赋给m本身

去掉一个1,计数器count就++

                     

实现代码:

#include <stdio.h>

//编写函数:
int number_of_1(int m)
//函数返回值:int ; 函数形参:int m
{
	//设置计数器:
	int count = 0;

	//使用while循环
	while (m) 
	//如果m不为0,就说明二进制中还有1,则继续循环
	{
		//使用公式:
		m = m & (m - 1); //去掉最右边的1
		count++; //计数器++
	}
}

int main()
{
	
	return 0;
}

实现图片:

                 


                 

第二步:

主函数:

                 

(1). 输入两个参数:m 和 n

             

(2). 把 m ^ n (m 异或 n)的结果作为参数传给 number_of_1() 函数

用一个变量接收返回值

                 

(3). 打印返回值

                     

实现代码:

#include <stdio.h>

//编写函数:
int number_of_1(int m)
//函数返回值:int ; 函数形参:int m
{
	//设置计数器:
	int count = 0;

	//使用while循环
	while (m) 
	//如果m不为0,就说明二进制中还有1,则继续循环
	{
		//使用公式:
		m = m & (m - 1); //去掉最右边的1
		count++; //计数器++
	}
}

int main()
{
	//输入两个数:
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);

	//异或:相同为0,相异为1
	int ret = number_of_1(m ^ n);

	//打印:
	printf("%d", ret);

	return 0;
}

实现图片:

                    

最终代码和实现效果

最终代码:

#include <stdio.h>

//编写函数:
int number_of_1(int m)
//函数返回值:int ; 函数形参:int m
{
	//设置计数器:
	int count = 0;

	//使用while循环
	while (m) 
	//如果m不为0,就说明二进制中还有1,则继续循环
	{
		//使用公式:
		m = m & (m - 1); //去掉最右边的1
		count++; //计数器++
	}
}

int main()
{
	//输入两个数:
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);

	//异或:相同为0,相异为1
	int ret = number_of_1(m ^ n);

	//打印:
	printf("%d", ret);

	return 0;
}

实现效果:

猜你喜欢

转载自blog.csdn.net/weixin_63176266/article/details/131248144