Coding & Programming/C언어 기초(A-Z)

[C언어 기초코딩: 예제로 간단 정리] 2. 변수(Varibale)와 자료형(Data Type) : char, short, int, long, float, double

mainCodes 2021. 3. 6. 16:01

JollyTree의 C언어 기초코딩: 예제로 간단 정리 - 2. 변수(Varibale)와 자료형(Data Type) :  char, short, int, long, float, double

 

안녕하세요 JollyTree(•̀ᴗ•́)و입니다.


오늘은 C언의 변수와 자료형에 대한 기록을 하려고합니다. 먼저 변수와 자료형에 대한 정의를 간단히 짚어보면 다음과 같습니다.

- 변수(Variable) : 코드 내에서 데이터를 저장하는 메모리 공간


실생활에서 집 주소가 있어 택배, 우편물이 정확히 우리집으로 배달이 되듯이, 컴퓨터의 메모리 공간도 0x40521088 번지와 같이 외우기 어려운 형태의 주소로 영역이 구분되어 있습니다. 그런데 이런 메모리 주소를 사람이 기억하기 어려우니 주소에 이름을 붙여서 알아보기 쉽도록 한 것이 변수입니다.

 

많은 분들이 변수를 물건을 담는 상자로 비유하는데 개인적으로 가장 와 닿는 용어인 것 같습니다. 뒤부분에서 조금 더 자세히 다루겠습니다.

- 자료형(Data Type) : 데이터를 저장하는 공간의 용도(유형)

 

정수(int), 실수(float), 문자(char) 등 메모리에 어떤 형태의 데이터를 저장할지에 따라 변수의 자료형을 정의합니다. 변수를 상자로 비유한다면 큰상자, 작은 상자 등 물건의 크기와 용도에 따라 상자의 용도가 다르 듯이 변수도 용도에 따라 자료형을 다르게 정의합니다. 

변수 선언 예제(Example):

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
#include <stdio.h>
 
int main(void)
{
    /* 선언된 여러 형태의 변수는 모두 특정 메모리 공간의 주소를 가리키고 있지만
      변수 이름을 대신 사용하므로 주소를 알아야 할 필요가 없습니다.
    */
    int a = 32, b = 33;
    char c = 'T';
 
    long d = 34;
    long long e = 1234567890;
    short month = 12;
    float pi = 3.14;
    double x = 1.987654321;
 
    printf(" char 형의 크기         : %d 바이트\n"sizeof(char));
    printf(" short 형의 크기        : %d 바이트\n"sizeof(short));
    printf(" int 형의 크기          : %d 바이트\n"sizeof(int));
    printf(" long 형의 크기         : %d 바이트\n"sizeof(long));
    printf(" long long 형의 크기    : %d 바이트\n"sizeof(long long));
    printf(" float 형의 크기        : %d 바이트\n"sizeof(float));
    printf(" double 형의 크기       : %d 바이트\n"sizeof(double));
 
    return 0;
}
cs

실행결과(환경 : Windows 10 x64):


위에서 보는 바와 같이 선언된 변수는 char, int, double 등의 자료형(Data Type)에 따라 메모리에서 차지하는 공간의 크기가 바이트 단위로 정해져 있습니다. 따라서, 코딩하면서 필요한 변수를 선언할 때 자료형을 선택해 주면 됩니다. 자료형은 아래와 같이 크게 문자형, 정수형, 부동소수점형으로 나뉩니다.

- 문자형 : char      (-128~127 또는 0~255의 수 저장 가능)
- 정수형 : int, short, long
- 부동소수점형(실수형) : float, double

차지하는 메모리 공간의 크기는 변화는 없지만, 각 자료형 앞에 unsigned 키워드를 붙여주면 부호가 있느냐 없느냐를 구분할 수 있습니다. 한 예로, int는 4바이트의 메모리 공간을 차지하면서 저장할 수 있는 수의 크기가 -2147483648~2147483647까지 저장이 가능하지만, unsigned int로 표기하면 0~4294967295 범위의 수를 저장할 수 있습니다.

  char c;                // -128~127 범위의 수/문자 저장 가능
  unsigned c;        // 0~255   음수 제외

  short s;                // -32768~32767
  unsigned short s // 0~65535

  int a ;                   // -2147483648~2147483647 
  unsigned int a;    // 0~4294967295

정해진 크기보다 큰 수나 데이터가 저장되면 오버플로우(Overflow)가 발생하니 참고하세요. 오버플로우는 담고자하는 메모리 공간이 넘치는 것입니다. 즉, 자료형 마다 상자의 크기가 모두 다릅니다. 정수형(int)은 4바이트 크기의 상자, 문자(char)는  1바이트 크기의 상자, 실수(float)은 4바이트 그리고 같은 실수를 담을 수 있는 double은 8바이트 크기의 메모리 상자입니다. 

 

당연히 작은 상자에 큰 값이나 데이터를 담으면 오버플로우가 발생하니 문제가 됩니다. 너무 과하게 담아서 종이 상자가 터지는 것과 같은 이치입니다.

 

마지막으로 변수를 선언할 때 한가지 유의할 점은 C언어에서 특별히 목적을 갖고 사용되는 for, if, auto, const, continue, sizeof, void, static, typedef 등의 예약어는 변수 이름으로 사용할 수 없습니다. 이는 컴파일 할 때 컴파일러가 오류를 알려주니 참고하세요.

그 외 변수와 함께 코딩하면서 자주 사용되는 것이 "상수(Constant)"로 선언된 변수는 저장되는 데이터를 변경할 수 있지만
상수는 변경할 수 없어 코딩할 때 변경되지 않는 데이터를 정의하며, 일반적으로 반복되는 데이터를 정의합니다.

#define PI 3.141592               //#define 전처리기를 이용한 상수 선언

const float PI = 3.141592;        //const 키워드를 이용한 상수 선언

다음 예제는 상수 사용 예제입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
#define PI 3.141592    //PI라는 이름의 상수 선언
 
int main(void)
{
    int a;
    float sum;
   // const float PI = 3.141592; //const 키워드 사용
 
    a = 20;
    sum = a + PI;      //3.141592 대신 알아보기 쉬운 PI라는 이름 사용
 
    printf("%f\n\n", sum);
 
    return 0;
}
cs

 

실행결과(Output):

앞으로 여기 블로그에는 코딩관련 예제를 많이 올릴 예정이니, 설명이 부족한 내용은 예제를 참고하세요.

이상 JollyTree였습니다.(•̀ᴗ•́)و