-
공용체와 열거체
[학습내용] [학습목표] ▪ 공용체
▪ 열거체▪ 공용체의 개념을 알고 구현할 수 있다.
▪ 열거체의 용도를 알고 코드에 적용할 수 있다.공용체
1. 공용체 활용
동일한 저장 장소에 여러 데이터 타입을 저장하는 자료구조
▪ 멤버들이 메모리를 공유해서 사용하는 기법
▪ 공용체의 크기는 공용체의 멤버 중 가장 크기가 큰 멤버에 의해 결정
▪ 공용체 변수를 초기화할 때는 첫 번째 멤버의 초기값만 지정
union sungjuk { char grade; int score; } union sungjuk std = { ‘B’ };
▪ 공용체의 멤버에 접근할 때도 ‘.’와 ‘->’ 연산자를 사용함
union sungjuk std; std.grade = ‘B’; std.score = 97 ; union sungjuk std; union sungjuk *pu = &std; pu→grade = ‘B’; pu→score = 97 ;
#include <stdio.h> union sungjuk { char grade; int score; }; int main() { union sungjuk std ; std.grade = 'B'; printf("%c %d \n", std.grade, std.score); std.score = 97; printf("%c %d \n", std.grade, std.score); printf("size %d", sizeof(std)); return 0; }
▪ 구조체와 공용체 비교
구조체 공용체
2. 비트필드
▪ 구조체가 가진 멤버를 비트 단위로 사용
▪ 비트필드 정의
멤버 이름 ➕ : ➕ 비트 수 기술
struct Date { int day; int month; int year }; struct Date { int day:5; // 1~31 int month:4; // 1~12 int year:13; // 1~4096 };
▪ 메모리에 할당할 때, 첫 번째 멤버를 최하위 비트에서부터 할당
▪ 비트필드의 멤버에 표현 가능한 범위 밖의 값을 저장하면 오버플로우가 발생
#include <stdio.h> struct Date { int day:5; // 1~31 int month:4; // 1~12 int year:13; // 1~4096 }; int main() { struct Date ent; ent.month = 17; printf("%d \n", ent.month); printf("size %d", sizeof(ent)); return 0; }
▪ 비트필드를 정의할 때는 중간에 일부 비트를 비워두고 멤버를 특정 비트에 할당할 수 있음
struct product unsigned int code : 6; //상품코드 6비트 unsigned int : 10; //10비트는사용하지않음 unsigned int color : 5; //색상 5비트 unsigned int : 5; //5비트는 사용하지 않음 unsigned int size : 3; //크기 3비트 };
리틀 엔디안과 빅 엔디안
리틀 엔디안 빅 엔디안 최하위 바이트부터
메모리에 저장하는 방식
⬇
인텔 계열의 CPU최상위 바이트부터
메모리에 저장하는 방식
⬇
모토로라 계열의 CPU열거체
1. 열거체 활용
▪ 나열된 정수 값 중 하나를 갖는 정수형의 일종
enum week { sun, mon, tue, wed, thu, fri, sat }; //sun은 0으로, mon은 1로,∙∙∙ sat은 6으로 정의됨 enum color { red = 10, green = 20, blue = 30 }; //red는 10, green은 20, blue는 30으로 정의됨
▪ 일종의 사용자 정의형
▪ 열거체 변수에는 열거체 정의에 나열된 열거 상수 중 하나를 저장하고 사용
enum week weekday; //열거체형 변수를 선언함 weekday = mon; mon //열거상수는 한 눈에 월요일이라는 것을 알 수 있음
▪ 열거 상수만 정수형 상수로 정의할 수도 있음
enum {red = 10, green = 20, blue = 30};
프로그램의 가독성(Readability)을 향상시키기 위해 사용
#include <stdio.h> enum weekday {sun, mon, tue, wed, thu, fri, sat}; int main() { enum weekday w_day; printf("Input 0~6 : "); scanf("%d", &w_day); printf("\n"); switch(w_day){ case sun : printf("Sunday"); break; case mon : printf("Monday"); break; case tue : printf("Tuesday"); break; case wed : printf("Wednesday"); break; case thu : printf("Thursday"); break; case fri : printf("Friday"); break; case sat : printf("Saturday"); break; default : printf(" Input Correct Number "); } return 0; }
2. typedef
재정의
▪ 데이터 타입의 이름을 새로운 이름으로 재정의
▪ 코딩의 편리성 증대
▪ 프로그램의 시스템 간 호환성 향상
편리성
▪ 구조체에서의 typedef
struct telephone { char *name; int num; }; typedef struct telephone TEL;
or
typedef struct telephone { char *name; int num; }TEL;
호환성
struct salary { int pay; int time; } typedef int SIZE; struct salary { SIZE pay; SIZE time; }
학습정리
1. 공용체
▪ 공용체는 멤버들이 메모리를 공유해서 사용하는 자료구조임
▪ 비트필드는 구조체 멤버를 비트 단위로 할당하여 사용함
2. 열거체
▪ 열거체는 정수형의 일종으로 변수가 가질 수 있는 값을 열거 상수로 나열하는 것임
▪ typedef은 기존의 데이터형에 새로운 이름을 만드는 기능임
▪ typedef는 호환성과 가독성을 향상시키는 목적으로 사용함
'Blog > JAVA기반 스마트웹 개발2021' 카테고리의 다른 글
프로그래밍 언어 활용 part 1 - 스토리지 클래스 (0) 2021.08.01 프로그래밍 언어 활용 part 1 - 함수의 인자 (0) 2021.08.01 프로그래밍 언어 활용 part 1 - 구조체 (0) 2021.07.31 프로그래밍 언어 활용 part 1 - 포인터와 문자열 (0) 2021.07.31 프로그래밍 언어 활용 part 1 - 포인터 활용 (0) 2021.07.29 댓글