### 1. 매크로 정의 설명
```c
#define GET_BIT(w,k) (((w) >> (k)) & 0x01)
```
- 이 매크로는 숫자 w의 k번째 비트 값을 가져옵니다
- `(w) >> (k)`: w를 k만큼 오른쪽으로 시프트
- `& 0x01`: 마지막 비트만 분리하기 위해 1과 AND 연산 수행
- 예시: w = 8 (이진수로 1000)이고 k = 3이면, 결과는 1
```c
#define SET_BIT_ON(w,k) ((w) |=(0x01 << (k)))
```
- 이 매크로는 w의 k번째 비트를 1로 설정
- `0x01 << (k)`: 1을 k만큼 왼쪽으로 시프트
- `|=`: OR 연산 후 결과를 다시 할당
- 예시: w = 0이고 k = 3이면, 결과는 8 (이진수로 1000)
```c
#define SET_BIT_OFF(w,k) ((w) &= ~(0x01 << (k)))
```
- 이 매크로는 w의 k번째 비트를 0으로 설정
- `0x01 << (k)`: 1을 k만큼 왼쪽으로 시프트
- `~`: 모든 비트를 반전
- `&=`: AND 연산 후 결과를 다시 할당
- 예시: w = 8 (이진수로 1000)이고 k = 3이면, 결과는 0
### 2. 프로그램 실행 과정
```c
int data = 0; // data를 0으로 초기화 (이진수로 00000000)
```
```c
SET_BIT_ON(data, 3); // 3번 비트를 1로 설정
// data는 8이 됨 (이진수로 00001000)
printf("%08X\n", data); // "00000008" 출력
printf("%d\n", GET_BIT(data, 3)); // "1" 출력
```
```c
SET_BIT_OFF(data, 3); // 3번 비트를 0으로 설정
// data는 0이 됨 (이진수로 00000000)
printf("%08X\n", data); // "00000000" 출력
printf("%d\n", GET_BIT(data, 3)); // "0" 출력
```
### 3. 시각적 표현
```plaintext
초기 상태:
data = 0 (00000000)
SET_BIT_ON(data, 3) 실행 후:
data = 8 (00001000)
↑
3번 비트
SET_BIT_OFF(data, 3) 실행 후:
data = 0 (00000000)
↑
3번 비트
```
### 4. 사용된 형식 지정자
- `%08X`: 앞에 0을 채워 8자리 16진수로 출력
- `%d`: 10진수로 출력
### 5. 출력 결과
```
00000008 // 3번 비트를 켠 후의 16진수 표현
1 // 3번 비트의 값 (켜짐)
00000000 // 3번 비트를 끈 후의 16진수 표현
0 // 3번 비트의 값 (꺼짐)
```
### 6. 주요 참고사항
1. 비트 위치는 오른쪽에서 왼쪽으로 0부터 시작
2. 매크로는 연산자 우선순위를 보장하기 위해 괄호 사용
3. 이 프로그램은 기본적인 비트 조작 연산을 보여줌:
- 특정 비트 읽기
- 비트를 1로 설정
- 비트를 0으로 설정
이러한 비트 조작은 주로 다음과 같은 분야에서 사용됩니다:
- 하드웨어 인터페이스 프로그래밍
- 메모리 효율적인 데이터 구조
- 플래그/상태 관리
- 임베디드 시스템 프로그래밍
이 코드는 비트 단위의 조작이 필요한 저수준 프로그래밍에서 매우 유용하게 사용됩니다.
'C-Python' 카테고리의 다른 글
| 카카오톡 메세지 정리 프로그램 (0) | 2025.04.22 |
|---|