Trong bài toán này, cho hai số M và N. Nhiệm vụ in vị trí (chỉ số) của bit chung (same bit) phải nhất của hai số.
Ví dụ minh họa:
Đầu vào - N = 4, M = 7
Kết quả - 3
Giải thích - (4)2 = 100, (7)2 = 111. Bit chung phải nhất ở chỉ số 3.
Để giải bài toán, tìm tất cả bit giống nhau của hai số. Dùng XOR của M và N, sau đó tìm bit phải nhất của phần phủ định của M^N.
Ví dụ minh họa:
N = 4, M = 7 ~(N^M) = 100. Bit 1 phải nhất ở chỉ số 3.
Chương trình minh họa
#include <iostream>
#include <math.h>
using namespace std;
int rightSetBit(int N) {
int bitIndex = log2(N & -N) + 1;
return bitIndex;
}
void rightSameBit(int m, int n) {
int diffBit = rightSetBit(~(m^n));
cout << diffBit;
}
int main() {
int N = 4, M = 7;
cout << "Vị trí bit chung phải nhất của " << N << " & " << M << " là ";
rightSameBit(N, M);
return 0;
}
Kết quả
Vị trí bit chung phải nhất của 4 & 7 là 3