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

ตำแหน่งของบิตเซ็ตขวาสุดใน C++


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

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

ป้อนข้อมูล − 4

ผลผลิต − 3

คำอธิบาย − เลขฐานสองของ 4 คือ 100 ดัชนีของบิตเซ็ตขวาสุดคือ 3

ในการแก้ปัญหานี้ วิธีแก้ไขง่ายๆ ก็คือการเลื่อนตัวเลขจนกว่าจะพบบิตที่ตั้งไว้ แต่อาจต้องใช้การคำนวณมากหากจำนวนนั้นมาก

วิธีแก้ปัญหาที่มีประสิทธิภาพมากขึ้นคือการใช้พีชคณิตแบบบูล สำหรับสิ่งนี้เราจะคำนวณส่วนประกอบ 2 ของตัวเลขก่อน ซึ่งจะพลิกบิตทั้งหมดของตัวเลขออกจากบิตชุดแรกตามที่เป็นอยู่ จากนั้นเราจะคำนวณ bit-wise &ของตัวเลขและเป็นส่วนเสริมของ 2 ซึ่งจะส่งผลให้เป็นตัวเลขที่มีชุดบิตเพียงชุดเดียวและตำแหน่งที่เราต้องการ การแก้ปัญหาจะได้รับจาก log2 ของหมายเลข +1

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

N= 10 , binary = 1010
2’s complement, 0101
1010 & 0101 = 0010
log2(2) = 1
1+1 = 2 which is the given index.

ตัวอย่าง

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

#include <iostream>
#include <math.h>
using namespace std;
void rightSetBit(int N) {
   int bitIndex = log2(N & -N)+1;
   cout<<bitIndex;
}
int main() {
   int N = 10;
   cout<<"The rightmost Set bit of the number "<<N<<" is : ";
   rightSetBit(N);
   return 0;
}

ผลลัพธ์

The rightmost Set bit of the number 10 is : 2