happy coding

[basic] 기본 타입 본문

카테고리 없음

[basic] 기본 타입

yeoonii 2022. 11. 15. 16:16
TCP school을 보고 정리한 내용입니다.

기본 타입

기본타입이란 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할을 한다.  C언어는 여러 형태의 타입을 미리 작성하여 제공하고 있는데, 이것을 기본 타입이라고 한다. 기본타입의 종류에는 1. 정수형 2. 실수형 3. 문자형 이 있다.

정수형 타입

정수란 부호를 가지고 있고, 소수 부분이 없는 수를 의미한다. 그 중 unsigned 키워드를 추가하면 부호를 나타내는 최상위 비트(MSB, Most Significant Bit)까지도 크기를 나타내는 데 사용할 수 있다. 여기서 unsigned 정수는 음수를 표현할 수는 없지만, 0을 포함한 양의 정수는 두 배 더 많이 표현할 수 있다. 음의 정수도 표현할 수 있는 signed 키워드는 모든 타입에서 생략해 사용할 수 있다.

최상위 비트 (MSB, Most Significant Bit) 는 1바이트를 구성하는 8개의 비트 중 최고값을 갖는 비트이다.
(signed) short 2 byte - 32,768 ~ 32,767
unsigned short 2 byte - 0 ~ 65,535
(signed) int 4 byte - 2,147,483,648 ~ 2,147,483,647
unsigned int 4 byte - 0 ~ 4,294,967,296
(signed) long 4 byte - 2,147,483,648 ~ 2,147,483,647
unsigned long 4 byte - 0 ~ 4,294,967,296

정수형 데이터의 타입을 결정할 때에는 반드시 자신이 사용하고자 하는 데이터의 최대 크기를 고려해야 한다. 그렇지 않다면, 해당 타입이 표현할 수 있는 범위를 벗어난 데이터를 저장하게 될 수 있어서 오버플로우가 발생해 전혀 다른 값이 저장될 수 있다.

오버 플로우(overflow)란 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상을 말한다. 오버플로우가 발생하면 최상위 비트(MSB)를 벗어난 데이터가 인접 비트를 덮어쓰므로, 잘못된 결과를 얻을 수 있다. 또한, 언더플로우란 해당 타입이 표현할 수 있는 최소 범위보다 작은 수를 저장할 때 발생하는 현상을 가리키기도 한다.
컴퓨터는 내부적으로 정수형 중에서도 Int형의 데이터를 가장 빠르게 처리하기에 , 보편적으로 크기에 상관없이 int형을 가장 많이 사용한다. 그리고 운영체제의 환경에 따라 다른데, 16bit 라면 2byte, 32bit 라면 4byte, 64bit이상부터는 4byte로 int형의 크기가 달라진다.

실수형 타입

C언어에서 실수는 소수부나 지수가 있는 수를 가리키며, 정수보다 훨씬 더 넓은 표현 범위를 가지지만, 반드시 오차가 발생하는 기술적 한계를 지니고 있다. 

실수형 타입 할당되는 메모리 크기 데이터 표현 범위 지수 길이 가수 길이 유효 자릿수
float 4 byte (3.4 X 10^(-38)) ~ (3.4 X 10(38)) 8 bit 23 bit 소수 6자리까지
double 8 byte (1.7 X 10^(-308)) ~ (1.7 X 10(308)) 11 bit 52 bit 소수 15자리까지
long double 8 byte (1.7 X 10^(-308)) ~ (1.7 X 10(308))      

실수형 데이터의 타입을 결정할 때는 표현 범위 이외에도 유효 자릿수를 반드시 고려해야 한다. 현재는 double형을 가장 많이 사용한다.

문자형 타입

문자형 데이터란 문자 하나를 표현할 수 있는 타입을 의미한다. 가장 많이 사용되는 것은 영문 대소문자를 사용하는 7비트의 문자 인코딩 방식인 ASCII 코드인데, 총 128개의 문자를 표현할 수 있다. 아스키코드의 구성은 1. 출력할 수 없는 33개의 문자 2. 출력할 수 있는 52개의 영문 대소문자, 10개의 숫자, 32개의 특수문자와 1개의 공백 문자 이다.

문자형 타입 할당되는 메모리의 크기 데이터의 표현 범위
(signed) char 1 byte 2^(-7) ~ 2^7
unsigned char 2 byte 0 ~ 2^(-8)

 

Comments