본문 바로가기
C C++/C언어 기초

C언어 #7 - 자료형의 이해 (int, long, float, double, char, short, long long)

by Go! Jake 2022. 1. 1.

 

C언어 기본 자료형

변수는 데이터 저장을 위해 할당된 메모리 공간에 붙인 이름이라고 한다. 이 때 메모리 공간을 할당할 때 그 용도가 결정되어야 한다.

 

예를 들어, 4 byte 정수를 저장할 때는 int로 표현하면 충분하다. 그렇다면 다른 자료형은 어떨까?

자료형 크기 값의 표현범위
정수형 char 1바이트 -128이상 +127이하
short 2바이트 -32768이상 +32767이하
int 4바이트 -2147483648이상 +2147483647이하
long 4바이트 -2147483648이상 +2147483647이하
long long 8바이트 -9223372036854775808이상
+9223372036854775807이하
실수형 float 4바이트 ±1.7×10^-37이상 ±3.4×10^+38
double 8바이트 ±1.7×10^-307이상 ±3.4×10^+308
long double 8바이트 이상 double 이상의 표현범위

 

- C표준을 정의하는 ANSI에서는 short와 int는 최소 2바이트이되, int는 short와 크기가 같거나 더 커야한다고 한다. 따라서 자료형 별 크기를 정확히 제한하고 있는 것은 아니며, 컴파일러마다 차이를 보인다. 위는 기본적인 기준으로만 삼아 보자.

 

- 연산자 sizeof로 자료형의 크기를 확인할 수 있다. int sz1 = sizeof(num); 을 사용하면 변수 num의 크기를 계산해서 sz1에 초기화(값 입력)하는 명령어가 된다.

 

정수형

- 그렇다면 정수형을 선언할 때 가장 기본적인건 뭘까? 우선 char와 short로 연산하여 사이즈를 확인 해 보자.

int main(void)
{
	char ch1 = 1, ch2 = 2;
	short ch3 = 3, ch4 = 4;
	printf("size: %d\n", sizeof(ch1+ch2));
	printf("size: %d", sizeof(ch3 + ch4));
	return 0;

}

두 값 모두 4바이트가 나온다. 이는 char와 short가 각각 1,2 바이트이기 때문에 예상하지 못했지만 '연산'에서는 int형 연산이 가장 CPU 성능내기가 좋아 int형 데이터로 바꿔서 연산을 한다고 한다.

 

실수형

실수 자료형 선택시에 고려할 점은 정밀도이다. 부동소수점으로 표현되기 때문에 바이트를 많이 사용할수록 유리하다.

실수 자료형 소수점 이하 정밀도 바이트 수
float 6자리 4
double 15자리 8
long double 18자리 12

기초적으로는 double 쓰면 된다고 한다. 

 

unsigned 붙이기

unsigned로 정의하면, 0 이상만 사용한다. Most significant bit를 부호로 사용하지 않기 때문에 양의 정수 방향으로 2배 범위가 넓어진다.

자세한 내용은 아래 글에 달아두었으니 확인하면 된다.

이전 글: 1의 보수, 2의 보수, Signed와 Unsigned의 모든 것 (tistory.com)

 

자료형 크기 값의 표현범위
정수형




char 1바이트 -128이상 +127이하
unsigned char 1바이트 0이상 255이하
short 2바이트 -32768이상 +32767이하
unsigned short 2바이트 0이상 65535이하
int 4바이트 -2147483648이상 +2147483647이하
unsigned int 4바이트 0이상 +4294967295이하
long 4바이트 -2147483648이상 +2147483647이하
unsigned long 4바이트 -2147483648이상 +2147483647
0이상 +4294967295이하
long long

8바이트
-9223372036854775808이상
+9223372036854775807이하
unsigned long

8바이트
-9223372036854775808이상 +9223372036854775807이하
0 이상 9223372036854775808+9223372036854775807이하
실수형 float 4바이트 ±1.7×10^-37이상 ±3.4×10^+38
double 8바이트 ±1.7×10^-307이상 ±3.4×10^+308
long double 8바이트 이상 double 이상의 표현범위

 

 

해당 내용은 윤성우 열혈 C프로그래밍을 참조하였습니다.

 

댓글