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

简介: 两个整数进行异或的结果是:相同位异或结果为0,不同位异或结果为1,进一步将问题转化为求这两个整数异或结果的二进制位为1的个数即所求两个数二进制数中不同位的合数。

思考:两个整数进行异或的结果是:相同位异或结果为0,不同位异或结果为1,进一步将问题转化为求这两个整数异或结果的二进制位为1的个数即所求两个数二进制数中不同位的合数。


如何求二进制为1的个数:将这个数与它减一进行按位与,循环执行,当所得结果为0时,循环多少次,1的个数就有多少个。


代码实现:

#include<stdio.h>
int main()
{
  int m, n, a, count = 0;    //m,n为两数,a为异或结果,count为1的个数
  scanf("%d%d", &m, &n); 
  a = m^n;                   //进行异或,不同的二进制位都变成1
  while (a)
  {
  count++;
  a = a&(a - 1);         //求二进制位为1的个数
  }
  printf("%d\n",count);
  return 0;




相关文章
|
6月前
二进制中1的个数
二进制中1的个数
38 0
|
8天前
二进制数从0开始的前几个数
二进制数从0开始的前几个数:
35 0
|
6月前
|
C++
Acwing.26 二进制中1的个数
Acwing.26 二进制中1的个数
|
11月前
统计两个整数所对应的二进制数中的不同位数的个数
统计两个整数所对应的二进制数中的不同位数的个数
42 0
计算二进制中1的个数
计算二进制中1的个数
62 0
|
算法
求二进制位中一的个数
求二进制位中一的个数
82 0
LeetCode 1689. 十-二进制数的最少数目
如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 。
95 0
|
算法
34.二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
82 0
34.二进制中1的个数
|
存储 前端开发 程序员
二进制中1的个数(下)
二进制中1的个数(下)
二进制中1的个数(下)