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}