在 C++ 中找到两个数字的最左边不同位的位置!
在这个问题中,我们给出了两个数字,num1和num2。我们的任务是找到两个数字最左边的不同位的位置。我们需要在它们各自的二进制表示中打印两个数字不同的第一位。两者的长度需要相同才能找到位。这是通过在位数较少的数字的开头附加0来完成的。
让我们举个例子来理解这个问题,
输入
num1 = 4, num2 = 7输出结果
1
解释
4的二进制表示是100
7的二进制表示是111
第一位不一样。
解决方法
解决该问题的一种方法是首先通过乘以2(位差)来均衡这两个数字中的位数。并且对两个数字进行异或运算,只会在它们的位不同的地方返回1。因此,在这个XOR中,我们将找到第一个位置,然后将其加1给出所需的位置。
算法
Step1-通过仅乘以(2^(bit-lengthdifference))来平衡数字的位。
步骤2-对num1和num2执行XOR运算。
步骤3-位差等于总(bitCount-XORbitCount+1)。
程序来说明我们的解决方案的工作,
示例
#include#include using namespace std; int findmisMatchBit(int num1, int num2) { if (num1 == num2) return 0; int num1Size = floor(log2(num1)) + 1; int num2Size = floor(log2(num2)) + 1; int BitSizeDiff = abs(num1Size - num2Size); int maxBitSize = max(num1Size, num2Size); if (num1Size > num2Size) num2 *= pow(2, BitSizeDiff); else num1 *= pow(2, BitSizeDiff); int XOR = num1 ^ num2; int XORBitSize = floor(log2(XOR)) + 1; return (maxBitSize - XORBitSize + 1); } int main() { int num1 = 43, num2 = 765; cout<<"The position of leftmost dis-similar bit of the two number is "< 输出结果 The position of leftmost dis-similar bit of the two number is 4