在 C++ 中找出最右不同的比特位


在这个问题中,给定两个数字 N 和 M。我们的任务是找出二进制表示中不同的最右位.

让我们举个例子来理解这个问题,

输入 − N = 12 ,M = 9

输出 − 2

解释 − (12)2 = 1100 和 (10)2 = 1010.

最右侧的第二位是个不同的位。

为了解决这个问题,我们必须找到所有这些数字的不同位。为了找到所有不同的位,我们将找到 M 和 N 的异或值。然后我们将找到 M^N 的最右位。

这似乎有点复杂,让我们用这个方法来解决一个例子。

N = 12 , M = 9
N^M = 0110.

最右侧的 set 位在这里位于索引 2 处。

示例

程序展示了解决方案的实现情况,

 Live Demo

#include <iostream>
#include <math.h>
using namespace std;
int rightSetBit(int N) {
   int bitIndex = log2(N & -N)+1;
   return bitIndex;
}
void rightDiffBit(int m, int n) {
   int diffBit = rightSetBit(m^n);
   cout<<diffBit;
}
int main() {
   int N = 12, M = 10;
   cout<<"Postion of first right different bit of the number "<<N<<" & "<<M<<" is ";
   rightDiffBit(N, M);
   return 0;
}

输出

Postion of first right different bit of the number 12 & 10 is 2

更新时间: 17-Apr-2020

已 浏览 314 次

开启您的 职业生涯

完成课程即可获得认证

开始
广告