본문 바로가기
C언어

[C언어] 정수 자료형

by 에파 2021. 5. 10.
728x90

C언어 정수 자료형

 

 

변수는 데이터를 저장하는 메모리의 공간이며 데이터 종류에 따라 다양한 형태를 사용합니다. 이와 같은 변수의 형태를 자료형 혹은 데이터형이라 하며, 크게 정수형과 실수형으로 구분합니다. 같은 정수형이라도 메모리 저장 공간의 크기에 따라 char, short, int, long, long long으로 구분됩니다.

 

 

char : 1바이트, short : 2바이트, int : 4바이트

long : 4바이트, long long : 8바이트

 

 

크기가 큰 자료형이 더 많은 범위의 값을 저장할 수 있으며 2^(비트수 - 1) ~ 2^(비트수 -1) -1 범위를 가집니다. 예를 들어 char형은 크기가 1바이트로 8비트입니다. 따라서 값의 저장 범위는 -2^7 ~ 2^7 -1, 즉 -128 ~ 127 의 값을 저장할 수 있습니다. char 형은 작은 범위의 정수를 저장할 수 있지만, 주로 문자를 저장하는 용도로 쓰입니다.

 

#include <stdio.h>

int main(void)
{
    char ch1 = 'A';
    char ch2 = 65;
    
    printf("문자 %c의 아스키 코드 값 : %d\n", ch1, ch1);
    printf("아스키 코드 값이 %d인 문자 : %c\n", ch2, ch2);
    
    return 0;
}

/*
<Run>
문자 A의 아스키 코드 값 : 65
아스키 코드 값잉 65인 문자 : A
*/

 

5행은 ch1에 문자 'A'를 저장하지만, 그 아스키 코드 값이 65이므로 결국 ch1에 65를 저장한 것과 같습니다. ch1과 ch2는 결국 같은 값이 저장되어 있는 거죠. 출력 형태는 변환 문자가 결정합니다.

 

변환 문자 %c는 char형 변수의 값을 아스키 코드 값으로 해석하여 그에 해당하는 문자를 출력합니다.

 

정수형에는 char 외에도 다양한 자료형이 있습니다. 처리할 데이터의 크기에 따라 적절한 자료형을 선택하면 됩니다.

 

#include <stdio.h>

int main(void)
{
    short sh = 32767;
    int in = 2147483647;
    long ln = 2147483647;
    long long lln = 123451234512345;
    
    printf("short형 변수 출력 : %d\n", sh);
    printf("int형 변수 출력 : %d\n", in);
    printf("long형 변수 출력 : %ld\n", ln);
    printf("long long형 변수 출력 : %lld\n", lln);
    
    return 0;
}

/*
<Run>
short형 변수 출력 : 32767
int형 변수 출력 : 2147483647
long형 변수 출력 : 2147483647
long long형 변수 출력 : 123451234512345
*/

 

각 자료형은 저장 값의 범위가 다르지만 출력할 때는 모두 %d를 사용합니다. 단, long형은 소문자 l 을 붙여서 %ld 로 출력하고 long long 형은 2개 붙여서 %lld 로 출력합니다.

 

 

이제 각 자료형을 살펴봤는데 언제 어떤 자료형을 써야할 지 고민이라면 아래 방법을 참고하세요.

 

 

방법 1. 특별한 경우가 아니면 정수형은 int를 사용합니다.

 

int형은 연산의 기본 단위로 컴퓨터에서 가장 빠르게 연산됩니다. short 형은 int 형보다 크기가 작아 메모리를 적게 사용하지만, 연산 과정에서는 int 형으로 변환되므로 실행 속도가 느려질 수 있습니다. long long형은 크기가 8바이트로 메모리 낭비가 큽니다. 

 

 

방법 2. long형은 큰 값을 저장할 때 사용합니다.

 

보통 컴파일러에서 int형은 4바이트입니다. 그런데 int형이 2바이트로 구현된 컴파일러가 간혹 있습니다. 이때 큰 값을 저장하려면 long형을 사용해야 합니다. int형과 long형의 크기가 같은 컴파일러라면 더 이상 long형을 사용할 필요가 없습니다.

 

자료형의 크기가 궁금하다면 sizeof 연산자를 이용할 수 있습니다.

 

printf("long long형의 크기 : %d바이트\n", sizeof(long long));

/*
<Run>
long long형의 크기 : 8바이트
*/

 

댓글