两个整数二进制表示中不匹配的位数


二进制语言是计算机的语言。因此,每个整数、字符或符号都需要转换为二进制系统,反之亦然。所有高级语言都有二进制表示。在本文中,我们将讨论整数的二进制表示。此外,我们将找到两个整数二进制表示中不匹配的位。

输入输出场景

给定两个整数 X 和 Y。其二进制表示中不匹配的位数作为输出。

Input: X = 25, Y = 15
Output: 3
Input: X = 6, X = 19
Output: 3

对于 X = 25,Y = 15,25 的二进制表示为 11001,15 的二进制表示为 1111。不匹配的位数为 3。

使用 for 循环和移位位置

我们将使用 for 循环遍历整数的位。循环将从 **0** 迭代到 **32**,因为在现代计算机中,**int** 数据类型使用 32 位表示。

在 for 循环中,我们将检查两个整数所有位置的位,并找出第 **ith** 位是否相同或不同。如果不同,我们将计数变量增加 1。

示例

以下示例计算两个整数二进制表示中不匹配的位数:

#include <iostream>
using namespace std;
int number(int A, int B){
   int count = 0;
   for (int i = 0; i < 32; i++) {
      if ((A & (1 << i)) != (B & (1 << i))) {
         count++;
      }
   }
   return count;
}
int main(){
   int A = 6, B = 19;
   cout<< "Number of mismatching bits in binary representation of "<< A << " and " << B << " is " << number(A, B) << std::endl;
   return 0;
}

输出

Number of mismatching bits in binary representation of 6 and 19 is 3

使用 XOR 运算

我们将对两个整数使用 **XOR** 运算。**XOR** 运算检查整数在相同位置的位是否不同。如果相同,结果为 0。而如果不同,结果为 1。此结果存储在 x 变量中。这将存储两个整数的所有不匹配位(为 1)。

接下来,我们运行一个 while 循环,直到 x 的值为非零。在循环中,我们使用 **AND** 运算符检查最高有效位(通常是最左边的位)是否为 1。如果为 1,则计数变量增加 1。

然后,我们使用 **(x >>= 1)** 将最高有效位向右移动一位。这使我们能够计算不匹配位的总数。

示例

让我们看一个例子:

#include <iostream>
using namespace std;
int number(int A, int B){
   int x = A ^ B;
   int count = 0;
   while(x > 0){
      if(x & 1){
         count++;
      }
      x >>= 1;
   }
   return count;
}
int main(){
   int A = 116, B = 219;
   cout<< "Number of mismatching bits in binary representation of "<< A << " and " << B << " is " << number(A, B) << std::endl;
   return 0;
}

输出

Number of mismatching bits in binary representation of 116 and 219 is 6

使用 Bitset 类

我们将使用标准 C++ 库的 **bitset** 类。它用于创建一个包含指定整数二进制表示的对象。

std::bitset<32> name(integer);

接下来,我们对这两个对象执行 **XOR** 运算。此运算给出两个整数二进制表示中不同的位。然后,我们使用 **count()** 函数计算不匹配位的总数。

示例

以下示例使用 bitset 类计算不匹配的位数:

#include <iostream>
#include <bitset>
using namespace std;
int number(int A, int B){
   std::bitset<32> num1(A);
   std::bitset<32> num2(B);
   std::bitset<32> result = num1 ^ num2;
   return result.count();
}
int main(){
   int A = 89, B = 72;
   cout<< "Number of mismatching bits in binary representation of "<< A << " and " << B << " is " << number(A, B) << std::endl;
   return 0;
}

输出

Number of mismatching bits in binary representation of 89 and 72 is 2

结论

我们讨论了查找两个整数二进制表示中不匹配位数的不同方法。第一种方法是使用 for 循环遍历整数的位。第二种方法是对整数使用 **XOR** 运算。第三种方法是使用 C++ 库的 **bitset** 类。

更新于: 2024年1月5日

249 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告