관리 메뉴

Kim's Programming

C언어 변수 - 변수란 무엇일까 본문

Programming/C

C언어 변수 - 변수란 무엇일까

Programmer. 2015. 7. 10. 16:55

이번 포스팅에서는 변수    에 대해서 알아보겠습니다.

 

우선 변수에 대해서 알아보겠습니다. 변수라함은 말그대로 변하는 수를 의미 합니다. 음.. 하지만 왜 하필 변수일까요? 그 이유는 한번 값을 입력하였다고 고정 되있는것이 아니라 변경을 하면 그 값에 맞게 계속 변하기 때문에 변수라고 하는 것 입니다. 변수를 사용하기에 앞서서 자료형이라는 것을 먼져 알아야 합니다. 자료형이랑 변수 앞에 붙여서 "이 변수는 어떻게 이용할 것이다." 라는 것을 미리 표시해두는 의미입니다. 또한 변수의 이름은 아무거나 선택이 가능합니다. 단순히 a, b 등 하나의 영문을 이용하여 변수를 선언할 수도 있습니다. 하지만 지금 배우는 때에는 코드가 10줄 이내이거나 아무리 길어도 100줄 이내이기 때문에 쉽게 이 변수가 무슨 역할을 하는지 알 수 있지만, 더 길어질 경우에는 단순히 a,b,c,d,e,f, 라고 해놨을때 구분해야할 변수도 많거니와 어디, 무슨용도로 선언해놓은 것인지 자신이 써놓은것임에도 불구하고 잊어버리기 쉽습니다. 변수의 선언은 꼭 의미를 부여하여 할 수 있도록 하여야합니다.

 

변수는 여러 종류가 있습니다. 부호지정형, 정수형, 실수형, 문자형, 그리고 기타형등이 있습니다. 표를 이용하여 나눠 분류하여 설명 해보도록 하겠습니다.

 

 1. 정수형(부호 있음) 

 자료형

의미 

바이트수(용량) 

값 범위 

 short

short형 정수 

 2

 -32768 ~ 32767

 int

 정수

 4

 -2147483648 ~ 2147483647

 long

 long형 정수

 4

 -2147483648 ~ 2147483647

 

 2. 정수형(부호 없음)

 자료형

의미 

바이트 수 

범위 

 unsigned short

부호없는 short형 정수 

 2

 0 ~ 65535

 unsigned int

부호없는 정수

 4

 0 ~ 4294967295

 unsigned long

부호없는 long형 정수 

 4

 0 ~ 4294967295

정수형은 보통 말그대로 정수를 넣을 때 이용을 합니다. 위의 표를 봤을때 같은 용량(바이트)을 차지하더라도 같은 용량에 부호를 사용하냐 안하냐에 따라서 범위의 차이가 나는걸 볼 수 있습니다. 양수만 이용할 때는 부호 없는 형태를 이용하는것이 용량적으로도 범위로도 이득인 것을 알 수 있습니다.

 

3. 문자형

 부호 여부

자료형 

 의미

바이트 수

 범위 (정수일 때)

 있음

 char

 문자 및 정수

 1

 -128 ~ 127

 없음

 unsigned char

 문자 및 부호없는 정수

 4

 0 ~ 255

보통은 문자를 넣을 때(문자 한개입니다, 문자열과 문자는 다름) 이용을 하지만 정수를 받을 수도 있습니다.

 

4.부동소수점형

 자료형

 의미

 바이트 수

 범위

 float

 단일 정밀도 부동 소수점

 4

 1.2E-38 ~ 3.4 E38

 double

 두배 정밀도 부동 소수점

 8

 2.2E-308 ~ 1.8E308

부동 소수점은 소수점 까지 표현하기 위함입니다. 위의 정수형에서는 소수점이 표현이 되지 않습니다.

 

PS. 컴파일러에 따라 바이트 수는 다를 수 있습니다.

 

이러한 여러가지의 자료형이 많은데 왜 자료형을 이용할까요? 자료형을 이용하는것은 효율성을 위하여 최대화하기 위함입니다. 위에 용량이라고 표기된 바이트수는 코드를 컴파일 한 후에 필요한 용량입니다. 실행시 메모리의 공간을 차지하는데 메모리 낭비를 막기 위함입니다. 예시를 들면 50이내의 정수만을 이용하는데 short형을 이용하면 2바이트를 이용해야하고 int 형을 이용하면 4바이트를 이용하게 됩니다. 하지만 char을 이용하면? 1바이트 만을 이용하면서도 50이내의 정수를 표현을 할 수있습니다. 이렇게 절약을 할 수 있는 것입니다. 근데 램 8기가 쓰는 시대에 고작 1,2바이트 절약해서 뭐하냐구요? 코드가 1만줄 2만줄이 되게 되면 이 누적 비트수는 몇 메가가 되어 있을 것 입니다.

이렇기 때문에 절약을 하는 것 입니다.

 

이제 어떤 종류의 자료형이 있는 지 알아봤고 위에서는 자료형을 변수 앞에 붙여서 사용한다는 사실을 알았으니 실제로 사용법을 알아 보겠습니다. 사용은 변수 앞에 자료형을 쓰고 한줄을 마쳐주시면 됩니다.

 

1
2
3
4
5
6
#include<stdio.h>
int main()
{
    short a;
    int b;
}
cs

 

 

선언은 다음과 같으며 아래처럼 미리 값을 대입하는 경우도 있습니다.

1
2
3
4
5
6
#include<stdio.h>
int main()
{
    short a=0;
    int b=5;
}
cs

 

 

이의 경우를 변수를 초기화를 하였다. 하고 표현을 합니다.초기화를 하는 대표적인 이유는 선언을 한뒤 초기화를 하지 않고 컴파일을 해도 컴파일이 되는 경우가 있습니다. 하지만 변수가 생성 된 후의 변수에 들어가있는 쓰레기값으롤 인해 컴파일의 오류도 빈번하게 일어납니다. 이런 이유로 변수 초기화를 하는 것을 생활화 하는것이 좋습니다.

 

자 변수 선언과 초기화를 알아 보았는데 용량이 진짜 일까요? 의심 드시나요? 그렇다면 직접 변수의 크기를 한번 쟤보겠습니다. 우선 sizeof라는 함수를 사용할 것 입니다. sizeof함수는 sizeof(변수)의 형태를 가지며 변수가 차지하는 바이트 수를 계산하여 출력 해주게 되는 함수 입니다.

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
32
33
34
#include<stdio.h>
int main()
{
    // 1. 정수형 (부호 있음)
    short Short=0;
    int Int=0;
    long Long=0;
    // 2. 정수형 (부호 없음)
    unsigned short u_Short=0;
    unsigned int u_Int = 0;
    unsigned long u_Long = 0;
    // 3. 문자형
    char Char = 0;
    unsigned u_Char =0;
    //4. 부동소수점형 
    float Float = 0;
    double Double = 0;
 
 
    printf("sizeof(Int) == %d 크기를 가진 변수\n"sizeof(Int));
    printf("sizeof(Short) == %d 크기를 가진 변수\n"sizeof(Short));
    printf("sizeof(Long) == %d 크기를 가진 변수\n\n"sizeof(Long));
 
    printf("sizeof(u_Short) == %d 크기를 가진 변수\n"sizeof(u_Short));
    printf("sizeof(u_Int) == %d 크기를 가진 변수\n"sizeof(u_Int));
    printf("sizeof(u_Long) == %d 크기를 가진 변수\n\n"sizeof(u_Long));
 
    printf("sizeof(Char) == %d 크기를 가진 변수\n"sizeof(Char));
    printf("sizeof(u_Char) == %d 크기를 가진 변수\n\n"sizeof(u_Char));
 
    printf("sizeof(Float) == %d 크기를 가진 변수\n"sizeof(Float));
    printf("sizeof(Double) == %d 크기를 가진 변수\n"sizeof(Double));
    return 0;
}
cs

다음 소스를 이용하여 변수들의 크기를 측정하였습니다, 구분하기 쉽도록 변수선언과 측정을 따로 했습니다. 측정 결과 값은?

 

 

다음과 같이 용량이 측정이 됨을 알 수 있습니다.