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

编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 输入例子:1999 2299输出例子:7
今天我想通过操作符里的知识,通过简单的异或关系完成题面要求。
思路:将两个数异或,即可将相同位全部清0,不同位全部置1,然后只需统计出1的个数即可找到答案
代码如下(代码中有较为详细的注释):

#include<stdio.h>
#include<windows.h>
#pragma warning(disable: 4996);
int bin_diff_bit(int m, int n)
{
    
       
  int tmp = m ^ n; //将两个数异或之后,将相同位清0,不同位全部为1   
  int count = 0;   
  while (tmp)  
  {
    
          
    tmp = tmp & (tmp - 1);//这一步是为了找m,n异或之后有多少个1;遇到一个1,才进行count++           
    count++;  
  }   
    return count;
 }
int main()
 {
    
       
   int m, n;  
   printf("Please enter two integers: ");   
   while (scanf("%d %d", &m, &n) == 2) //成功读取两个有效数字才可以进行下一步   
   {
    
      
        printf("%d\n", bin_diff_bit(m, n));//调用函数  
   }  
     system("pause");  
     return 0;
 }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/DrewLee/article/details/107210195