bit_manipulation.c

Download
c 102 lines 2.4 KB
  1// bit_manipulation.c
  2// ๋น„ํŠธ ์กฐ์ž‘ ์˜ˆ์ œ
  3
  4#include <stdio.h>
  5
  6// ๋น„ํŠธ ์ถœ๋ ฅ ํ•จ์ˆ˜
  7void print_binary(unsigned char n) {
  8    for (int i = 7; i >= 0; i--) {
  9        printf("%d", (n >> i) & 1);
 10        if (i == 4) printf(" ");
 11    }
 12}
 13
 14// ๋น„ํŠธ ์กฐ์ž‘ ๋งคํฌ๋กœ
 15#define SET_BIT(reg, bit)    ((reg) |= (1 << (bit)))
 16#define CLEAR_BIT(reg, bit)  ((reg) &= ~(1 << (bit)))
 17#define TOGGLE_BIT(reg, bit) ((reg) ^= (1 << (bit)))
 18#define GET_BIT(reg, bit)    (((reg) >> (bit)) & 1)
 19
 20int main(void) {
 21    unsigned char value = 0b10110010;  // 178
 22
 23    printf("=== ๋น„ํŠธ ์กฐ์ž‘ ์˜ˆ์ œ ===\n\n");
 24
 25    printf("์ดˆ๊ธฐ๊ฐ’: ");
 26    print_binary(value);
 27    printf(" (0x%02X, %d)\n\n", value, value);
 28
 29    // ๋น„ํŠธ ์„ค์ • (SET)
 30    printf("๋น„ํŠธ 3 ์„ค์ • (SET_BIT):\n");
 31    SET_BIT(value, 3);
 32    printf("  ๊ฒฐ๊ณผ: ");
 33    print_binary(value);
 34    printf(" (0x%02X)\n\n", value);
 35
 36    // ๋น„ํŠธ ํ•ด์ œ (CLEAR)
 37    printf("๋น„ํŠธ 5 ํ•ด์ œ (CLEAR_BIT):\n");
 38    CLEAR_BIT(value, 5);
 39    printf("  ๊ฒฐ๊ณผ: ");
 40    print_binary(value);
 41    printf(" (0x%02X)\n\n", value);
 42
 43    // ๋น„ํŠธ ํ† ๊ธ€ (TOGGLE)
 44    printf("๋น„ํŠธ 0 ํ† ๊ธ€ (TOGGLE_BIT):\n");
 45    TOGGLE_BIT(value, 0);
 46    printf("  ๊ฒฐ๊ณผ: ");
 47    print_binary(value);
 48    printf(" (0x%02X)\n\n", value);
 49
 50    // ๋น„ํŠธ ์ฝ๊ธฐ (GET)
 51    printf("๊ฐ ๋น„ํŠธ ๊ฐ’ ์ฝ๊ธฐ:\n");
 52    for (int i = 7; i >= 0; i--) {
 53        printf("  ๋น„ํŠธ %d: %d\n", i, GET_BIT(value, i));
 54    }
 55    printf("\n");
 56
 57    // ํ”Œ๋ž˜๊ทธ ์˜ˆ์ œ
 58    printf("=== ํ”Œ๋ž˜๊ทธ ๊ด€๋ฆฌ ์˜ˆ์ œ ===\n\n");
 59
 60    #define FLAG_RUNNING   (1 << 0)
 61    #define FLAG_ERROR     (1 << 1)
 62    #define FLAG_CONNECTED (1 << 2)
 63    #define FLAG_READY     (1 << 3)
 64
 65    unsigned char flags = 0;
 66
 67    printf("์ดˆ๊ธฐ ํ”Œ๋ž˜๊ทธ: ");
 68    print_binary(flags);
 69    printf("\n\n");
 70
 71    // ํ”Œ๋ž˜๊ทธ ์„ค์ •
 72    flags |= FLAG_RUNNING;
 73    printf("RUNNING ํ”Œ๋ž˜๊ทธ ์„ค์ •: ");
 74    print_binary(flags);
 75    printf("\n");
 76
 77    flags |= FLAG_READY;
 78    printf("READY ํ”Œ๋ž˜๊ทธ ์„ค์ •:   ");
 79    print_binary(flags);
 80    printf("\n\n");
 81
 82    // ํ”Œ๋ž˜๊ทธ ํ™•์ธ
 83    if (flags & FLAG_RUNNING) {
 84        printf("์‹œ์Šคํ…œ์ด ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.\n");
 85    }
 86
 87    if (flags & FLAG_ERROR) {
 88        printf("์—๋Ÿฌ ๋ฐœ์ƒ!\n");
 89    } else {
 90        printf("์ •์ƒ ๋™์ž‘ ์ค‘\n");
 91    }
 92    printf("\n");
 93
 94    // ํ”Œ๋ž˜๊ทธ ํ•ด์ œ
 95    flags &= ~FLAG_RUNNING;
 96    printf("RUNNING ํ”Œ๋ž˜๊ทธ ํ•ด์ œ: ");
 97    print_binary(flags);
 98    printf("\n");
 99
100    return 0;
101}