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

อัปเดตบิตในตำแหน่งที่กำหนดหรือดัชนีของตัวเลขโดยใช้ C++


ในปัญหาที่กำหนด เราต้องอัปเดตบิตของดัชนีที่กำหนดของตัวเลข ในการอัปเดตหมายเลข เราสามารถใช้การดำเนินการ Bit Manipulation กับหมายเลขที่กำหนด ตัวอย่างเช่น

อินพุต-1

N= 25
bit= 1
position= 2

ผลผลิต

29

คำอธิบาย − เนื่องจากอินพุตที่กำหนด 25 สามารถเขียนเป็นไบนารีเป็น '11001' ในขณะที่ดัชนีตำแหน่งคือ '2' และบิตคือ '1' หลังจากแทนที่ตัวเลขในตำแหน่งที่กำหนดแล้ว เอาต์พุตจะเป็น '11101' ซึ่งเทียบเท่ากับ '29'

แนวทางการแก้ปัญหานี้

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

  • ป้อนตัวเลข N บิตเพื่ออัปเดตเป็น 'บิต' และตำแหน่งหรือดัชนีที่เราต้องอัปเดตบิตเป็น 'ตำแหน่ง'

  • ฟังก์ชัน void updateBit(int &n, int bit, int position) รับที่อยู่ของบิตปัจจุบัน ค่าบิต และดัชนีของบิต ฟังก์ชันจะพิมพ์ค่าที่อัปเดตของตัวเลขโดยแทนที่บิตด้วยค่าที่กำหนด

  • ล้างบิตที่ตำแหน่งที่กำหนดและเพิ่มบิตผลลัพธ์ให้กับผลลัพธ์

  • สร้างมาสก์และดำเนินการ AND พร้อมผลลัพธ์

  • ดำเนินการไบนารี OR ด้วยมาสก์ที่เราสร้างขึ้นและดำเนินการกะที่ถูกต้องด้วยค่าที่จะอัปเดตที่ดัชนี

ตัวอย่าง

#include<iostream>
using namespace std;
void updateBit(int &n,int bit, int pos){
   int clearBit= ~(1<<pos);
   int mask= n & clearBit;
   n= mask |(bit<<pos);
}
int main(){
   int n=25;
   int bit=1;
   int pos=2;
   updateBit(n,bit,pos);
   cout<<n;
}

ผลลัพธ์

การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น

29

เนื่องจากอินพุตคือ 25 ซึ่งเท่ากับ 11001 ในการแทนค่าไบนารี หลังจากแทนที่ตำแหน่งที่เป็น '2' ด้วย '1' มันจะกลายเป็น 11101 ในรูปแบบไบนารีซึ่งก็คือ 29