티스토리 뷰
비트필드(bit field)는 구조체 멤버가 바이트 단위가 아닌 비트 단위 데이터를 다루는 멤버로 선언되는 구조체이다.
만일 비트필드를 이용하지 않고도 일정 비트를 잘라내려면 마스크 연산을 비롯한 각종 비트연산을 수행해야 한다.
#include<stdio.h>
//비트필드 구조체 선언 및 정의
typedef struct _DATAFLAG{
unsigned char main : 1; //8비트 중 오른쪽 1비트
unsigned char left : 2; //오른쪽 2~3번째 비트
unsigned char right : 3; //오른쪽 4~6번째 비트
unsigned char top : 2; //오른쪽 7~8번쨰 비트 (왼쪽 두 비트)
} DATAFLAG;
int main(void) {
//1비트 표현범위: 0~1
//2비트 표현범위: 0~3 (4는 범위를 넘어선 값이다!)
//3비트 표현범위: 0~7
DATAFLAG flagSwitch = {0, 3, 7, 4};
printf("%d\n", flagSwitch.main);
printf("%d\n", flagSwitch.left);
printf("%d\n", flagSwitch.right);
//4는 2비트 표현범위를 넘어선 값이므로 출력할 수 없다(0 출력).
printf("%d\n", flagSwitch.top);
printf("%x\n", *((unsigned char *)&flagSwitch));
printf("%d\n", sizeof(flagSwitch));
return 0;
}
공용체(union)는 한 가지 자료에 대해 여러가지 해석방법(자료형)을 부여하는 문법이다.
#include<stdio.h>
//IP_ADDR '공용체' 선언 및 형 재선언
//4바이트를 세 가지 형식으로 달리 해석할 수 있도록 선언한다.
typedef union _IP_ADDR {
int nAddress;
short awData[2];
unsigned char addr[4];
} IP_ADDR;
int main(void) {
IP_ADDR Data = {0};
Data.nAddress = 0x41424344;
//0x41424344를 8비트씩 0x41, 0x42, 0x43, 0x44 넷으로 잘라
//영문자로 출력한다.
printf("%c%c%c%c\n", Data.addr[0], Data.addr[1], Data.addr[2], Data.addr[3]);
//16비트씩 둘로 잘라 출력한다.
printf("%X, %d\n", Data.awData[0], Data.awData[0]);
printf("%X, %d\n", Data.awData[1], Data.awData[1]);
return 0;
}
'언어 > C' 카테고리의 다른 글
형한정어, 외부변수 선언, 형 재선언, 열거형 상수 - 독하게 시작하는 C프로그래밍 (0) | 2019.10.24 |
---|---|
파일 시스템 기본 이론 - 독하게 시작하는 C프로그래밍 (0) | 2019.10.23 |
구조체 - 독하게 시작하는 C프로그래밍 (0) | 2019.10.04 |
Call by value, Call by reference - 독하게 시작하는 C프로그래밍 (0) | 2019.10.03 |
포인터의 배열과 다중 포인터 - 독하게 시작하는 C프로그래밍 (0) | 2019.09.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 다차원 배열
- 공부
- call by value
- 2차원 배열
- 강의
- Algorithm
- timecomplexity
- 배열
- inflearn
- call by reference
- 포인터
- 비트필드
- 간접 지정
- 알고리즘
- 구조체
- 직접 지정
- 파이썬
- 프로그래밍
- 공간복잡도
- codeit
- 공용체
- 1차원 배열
- C
- 형승격
- 시간복잡도
- 자료구조
- 종류
- 3차원 배열
- 회전리스트
- 재귀함수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함