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

简介: 思路:总体思路:把 m 异或 n 后,有几个相异就有几个1,再计算下二进制有几个1即可 (1). 编写函数:number_of_1() ,计算二进制中有几个1。 (2). 在主函数中,把 m ^ n (m 异或 n)的结果作为参数传给 number_of_1() 函数

思路:

总体思路:

把 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;
}

实现图片:

image.png

第二步:

主函数:

               

(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;
}

实现图片:

image.png

最终代码和实现效果

最终代码:

#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;
}

实现效果:

3eac4c580fbe472f80262ab7ea3ad1f9.png

相关文章
|
6月前
|
存储 C语言
C语言实现二进制到十进制
C语言实现二进制到十进制
64 0
|
5月前
|
C语言
C语言---二进制位置0或者置1
C语言---二进制位置0或者置1
|
5月前
|
C语言
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
|
5月前
|
C语言
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
|
5月前
|
C语言
C语言----获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
C语言----获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
|
5月前
|
存储 C语言
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
C语言---求一个整数存储在内存中的二进制中1的个数--3种方法
|
6月前
|
C语言
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)(下)
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)
40 0
|
6月前
|
C语言
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)(上)
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)
111 0
|
6月前
|
C语言
【C语言】求一个整数的二进制序列中1的个数的三种方法
【C语言】求一个整数的二进制序列中1的个数的三种方法
96 0
|
6月前
|
存储 C语言
十进制转二进制,C语言的必备技能
十进制转二进制,C语言的必备技能