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

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

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