ในปัญหาที่กำหนด เราต้องอัปเดตบิตของดัชนีที่กำหนดของตัวเลข ในการอัปเดตหมายเลข เราสามารถใช้การดำเนินการ 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