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

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


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

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล − N =12 , M =9

ผลลัพธ์ − 2

คำอธิบาย − (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