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

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


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

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

ป้อนข้อมูล − N =4 , M =7

ผลผลิต − 3

คำอธิบาย − (4)2 =100 , (7)2 =111 บิตร่วมขวาสุดอยู่ที่ดัชนี 3

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

ดูเหมือนว่าจะซับซ้อนเล็กน้อยที่จะเข้าใจ มาแก้ตัวอย่างโดยใช้วิธีนี้กัน

N = 4 , M = 7
~N^M = 100.

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

ตัวอย่าง

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

#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<<"Postiion of first right same bit of the number "<<N<<" & "<<M<<" is ";
   rightSameBit(N, M);
   return 0;
}

ผลลัพธ์

Postiion of first right same bit of the number 4 & 7 is 3