Set or Clear a Specific Bit in a Register

Code

#include <stdio.h>

int main() {
    int registerValue; // Giá trị thanh ghi (0-255)
    int bitPosition;   // Vị trí bit (0-7)
    int mode;          // 0: Clear, 1: Set

    // 1. Nhập dữ liệu từ bàn phím
    // Định dạng nhập: Giá_trị  Vị_trí  Chế_độ
    if (scanf("%d %d %d", &registerValue, &bitPosition, &mode) != 3) {
        return 1; // Thoát nếu nhập sai
    }

    // 2. Xử lý logic
    if (mode == 1) {
        // SET BIT: Dùng toán tử OR (|)
        // Dịch số 1 sang trái 'bitPosition' lần, rồi OR vào giá trị gốc
        registerValue = registerValue | (1 << bitPosition);
    } 
    else if (mode == 0) {
        // CLEAR BIT: Dùng toán tử AND (&) và NOT (~)
        // Dịch số 1 sang trái, đảo ngược bit (~) để tạo mask, rồi AND vào giá trị gốc
        registerValue = registerValue & ~(1 << bitPosition);
    }

    // 3. In kết quả ra màn hình
    printf("%d\n", registerValue);

    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

10 3 1

Expected Output

10