본문 바로가기

Programming/C언어 초급

C언어 초급) 02.변수 : 05. 문자형

들어가며...

문자형 변수의 경우는 다른 자료형들 보다 비교적 간단합니다. 크기가 1바이트여서 표현의 개수는 256개이며 0~255까지의 범위를 갖습니다. 그럼 문자형 변수에 대해서 간략하게 살펴보도록 하겠습니다.

 

  • Table of Contents
    • 문자형 변수의 종류 및 길이
    • ASCII 코드

문자형 변수의 종류 및 길이

문자형 변수의 종류 및 길이는 다음과 같습니다.

 

타입 크기(바이트) 표현범위
char 1   -128 ~ 127
unsigned char 1   0 ~ 255

위의 내용을 코드로 확인하면 다음과 같습니다.

 

● 예제코드

#include <stdio.h>

int main(void) {
  printf("The size of char : %lu\n", sizeof(char));
  printf("The size of unsigned char : %lu\n", sizeof(unsigned char));

  return 0;
}

 

● 결과확인

ASCII 코드

컴퓨터는 모든 표현을 정수형(정확하게는 0과 1)으로 밖에 표현 못합니다. 따라서, 문자 'a'와 같은 문자값을 표현하기 위해서는 특정 정수값으로 변환하여 표현하여야 하는데 이 때 사용되는 것이 ASCII 코드 입니다.

 

● ASCII 코드표

 

위의 표에서 알 수 있듯이 제어문자와 공백문자를 제외한 나머지 값들은 사람의 눈으로 식별이 가능한 값들이며 다른 것은 몰라도 0x30(0)으로 시작하는 숫자와 소문자 알파벳, 대문자 알파벳의 시작 값 각각 0x61('a'), 0x41('A')은 외워두시는 것이 좋습니다.

 

다음은 실제 문자의 값이 어떻게 표현하는 지 예제로 알아보도록 하겠습니다.

 

● 예제코드

#include <stdio.h>

int main(void) {
    int count = 32;
    const int COL_NUM = 5;
    const int MAX_NUM = 127;
    
    while(1) {
        int nColumn = (MAX_NUM - count) >= COL_NUM ? COL_NUM : (MAX_NUM - count) % COL_NUM;
        
        for(int i = 0 ; i < nColumn ; i++) {
            // print the character
            printf("|%3d|0x%02x|%-5c|%c", count, count, (0x000000FF & count), 0x20);
            // increase the count
            count++;
        }
        
        printf("\n");
        
        // terminate while loof
        if(nColumn != COL_NUM) {
            break;
        }
    }
}

* 제어문자와 공백문자 및 127이상의 문자의 경우 오동작할 가능성이 있기 때문에 예제에서 배제하였습니다.

 

● 결과확인

 

● 확장열 문자

위 ASCII 코드 값 중 숫자, 알파벳 및 구두점 이외에 빈번하게 사용하는 문자를 특별하게 확장열이라 하여 '\'의 값과 함께 사용할 수 있는 문자들이 있습니다. 

 

확장열 표현 코드 (16진수) 설명
\a 0x07   벨 소리
\b 0x08   백 스페이스
\t 0x09   탭
\n 0x0a   개행 (줄넘김)
\\ 0x5c   백슬래쉬
\' 0x27   작은 따옴표
\" 0x22   큰 따옴표
\? 0x3f   물음표

 

개행문자의 경우 앞의 많은 예제에서 printf() 함수를 사용할 때 문자열 끝에 거의 항상 붙혀온 것을 확인하실 수 있었을 것입니다. 이와 같은 형태로 슬래쉬('\') 함께 사용하면 해당 문자를 표현할 수 있습니다.

마무리...

이상으로 간략하게 문자형 변수에 대해서 살펴봤습니다. 이번 장은 크게 어려운 부분이 없었을 것이라 생각됩니다. 문자값이 ASCII코드 값으로 메모리에 저장된 다는 것만 알아두시면 될 듯 합니다.

 


U2ful은 입니다. @U2ful Corp.