ในปัญหานี้ เราต้องอัปเดตบิตของดัชนีที่กำหนดของตัวเลข ในการอัปเดตตัวเลข เราสามารถใช้การดำเนินการ Bit Manipulation บนตัวเลขที่กำหนดได้ ตัวอย่างเช่น
ตัวอย่างอินพุต
N = 25, bit = 1, position = 2
เอาต์พุต
29
คำอธิบาย
เนื่องจากอินพุตที่กำหนด 25 สามารถเขียนในรูปแบบทวิภาคได้เป็น '11001' ในขณะที่ดัชนีตำแหน่งคือ '2' และบิตคือ '1' หลังจากแทนที่ตัวเลขในตำแหน่งที่กำหนด ผลลัพธ์จะกลายเป็น '11101' ซึ่งเทียบเท่ากับ '29'
วิธีการแก้ปัญหา
ในตำแหน่งหรือดัชนีที่กำหนดของตัวเลข งานคือการอัปเดตบิตด้วยบิตเฉพาะที่ระบุในอินพุต วิธีการอัปเดตบิตในตำแหน่งที่กำหนดคือ เริ่มจากล้างบิตในตำแหน่งที่กำหนด จากนั้นดำเนินการ Binary AND เพื่ออัปเดตบิต
- รับอินพุตตัวเลข N, บิตที่จะอัปเดตเป็น 'bit' และตำแหน่งหรือดัชนีที่ต้องอัปเดตบิตเป็น 'position'
- ฟังก์ชัน void updateBit(int &n, int bit, int position) รับที่อยู่ของบิตปัจจุบัน ค่าบิต และดัชนีของบิต ฟังก์ชันจะพิมพ์ค่าที่อัปเดตของตัวเลขโดยการแทนที่บิตด้วยค่าที่กำหนด
- ล้างบิตในตำแหน่งที่กำหนดและเพิ่มบิตผลลัพธ์เข้าไปในผลลัพธ์
- สร้างมาสก์และดำเนินการ AND กับผลลัพธ์
- ดำเนินการ Binary OR กับมาสก์ที่สร้างขึ้นและดำเนินการ right shift กับค่าที่จะอัปเดตในดัชนี
ตัวอย่างโค้ด
#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;
return 0;
}
ผลลัพธ์
การรันโค้ดด้านบนจะสร้างเอาต์พุตเป็น
29
เนื่องจากอินพุตคือ 25 ซึ่งเป็น 11001 ในรูปแบบทวิภาค หลังจากแทนที่ตำแหน่งที่เป็น '2' ด้วย '1' จะกลายเป็น 11101 ในรูปแบบทวิภาค ซึ่งคือ 29