Trong bài toán này, chúng ta cần cập nhật bit tại vị trí (chỉ số) cho trước của một số. Để thực hiện việc này, ta sử dụng các thao tác thao tác bit (Bit Manipulation) trên số đã cho. Ví dụ:
Đầu vào 1:
N = 25, bit = 1, vị trí = 2
Đầu ra:
29
Giải thích: Số 25 dưới dạng nhị phân là '11001'. Vị trí chỉ số là '2' (tính từ 0 từ phải sang trái) và bit cần cập nhật là '1'. Sau khi thay thế bit tại vị trí 2, ta được '11101' nhị phân, tương đương với 29 thập phân.
Phương pháp giải quyết
Nhiệm vụ là cập nhật bit tại vị trí cho trước với giá trị bit đầu vào. Cách tiếp cận là: trước tiên xóa bit tại vị trí đó, sau đó thực hiện phép OR bitwise để đặt bit mới.
- Nhập số N, giá trị bit (0 hoặc 1) và vị trí (position).
- Hàm
updateBit(int &n, int bit, int pos)nhận tham chiếu đến số, giá trị bit và vị trí. Hàm sẽ cập nhật số và in ra giá trị mới. - Xóa bit tại vị trí
posbằng mặt nạ~(1 << pos)và phép AND. - Tạo mặt nạ bit mới:
bit << pos. - Thực hiện phép OR giữa số đã xóa bit và mặt nạ bit mới để đặt bit.
Ví dụ mã nguồn
#include <iostream>
using namespace std;
void updateBit(int &n, int bit, int pos) {
int clearMask = ~(1 << pos);
n = (n & clearMask) | (bit << pos);
}
int main() {
int n = 25;
int bit = 1;
int pos = 2;
updateBit(n, bit, pos);
cout << n;
return 0;
}
Kết quả
Chạy chương trình cho đầu ra:
29
Số 25 (nhị phân 11001) sau khi đặt bit 1 tại vị trí 2 trở thành 11101 (29).