Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตำแหน่งบิตขวาสุดที่ต่างกันใน C++

ในปัญหานี้ เราได้รับตัวเลขสองตัว N และ M งานของเราคือหาดัชนีของบิตขวาสุดที่ต่างกันในการแทนค่าไบนารีของตัวเลข

มาดูตัวอย่างเพื่อเข้าใจปัญหา:

Input - N = 12 , M = 9

Output - 2

Explanation - (12)2 = 1100 และ (10)2 = 1010

บิตที่สองจากขวาคือบิตที่ต่างกัน

เพื่อแก้ปัญหานี้ เราจะต้องหาบิตที่ต่างกันทั้งหมดของตัวเลข เพื่อหาบิตที่ต่างกันทั้งหมด เราจะหา XOR ของ M และ N แล้วหาบิตขวาสุดของ M^N

สิ่งนี้ดูซับซ้อนเล็กน้อย มาแก้ตัวอย่างด้วยวิธีนี้:

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

บิตเซ็ตขวาสุดที่นี่อยู่ที่ดัชนี 2

ตัวอย่าง

โปรแกรมแสดงการนำโซลูชันของเราไปใช้งาน:

#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