两个整数二进制表示中不匹配的位数
二进制语言是计算机的语言。因此,每个整数、字符或符号都需要转换为二进制系统,反之亦然。所有高级语言都有二进制表示。在本文中,我们将讨论整数的二进制表示。此外,我们将找到两个整数二进制表示中不匹配的位。
输入输出场景
给定两个整数 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** 类。