2025-01-15 12:41:36

### 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