• 프로그래밍 언어 활용 part 1 - 공용체와 열거체

    2021. 7. 31.

    by. 고구마달랭이

    공용체와 열거체

    [학습내용] [학습목표]
    ▪ 공용체
    ▪ 열거체
    ▪ 공용체의 개념을 알고 구현할 수 있다.
    ▪ 열거체의 용도를 알고 코드에 적용할 수 있다.

    공용체

     

    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는 호환성과 가독성을 향상시키는 목적으로 사용함

    댓글