변수와 자료형
변수와 자료형의 개념
변수 (Variable)
프로그램에서 자료 값을 임시로 기억하는 저장 공간을 **Variable(변수)**라고 한다. 이 Variable은 컴퓨터의 주기억장치인 **RAM(Random Access Memory)**에 생성된다. Variable은 특정 크기의 물건을 담는 상자와 같아서, 그 종류와 크기에 따라 저장할 수 있는 값의 유형이 제한된다.
자료형 (Data Type)
Variable에 저장될 수 있는 값의 종류를 **Data Type(자료 유형)**이라고 한다. C 언어의 Data Type은 크게 기본 자료형(basic type)과 유도 자료형(derived type)으로 나뉜다. 유도 자료형에는 배열, 구조체 등이 포함된다. Data Type에 따라 Variable이 차지하는 메모리 공간의 크기와 내부적인 데이터 저장 방식이 결정된다.
기본 자료형의 종류
C 언어의 기본 Data Type은 크게 문자형, 정수형, 부동소수점형으로 구분되며, 총 12가지가 있다.
-
문자형 (Character Type)
char
signed char
unsigned char
-
정수형 (Integer Type)
short
(또는short int
)unsigned short
(또는unsigned short int
)int
unsigned int
long
(또는long int
)unsigned long
(또는unsigned long int
)
-
부동소수점형 (Floating-point Type)
-
float
-
double
-
long double
-
변수와 상수의 선언
변수 선언 (Declaration)
Variable은 사용하기 전에 반드시 **Declaration(선언)**해야 한다. 선언은 하나의 문장이므로 끝에 세미콜론(;)을 붙여야 한다.
// 형식: 자료형 변수이름;
int money;
Variable을 선언하면서 초기 값을 할당할 수도 있다.
// 형식: 자료형 변수이름 = 초기값;
int year = 12;
오래된 ANSI C 표준에서는 Variable의 Declaration이 반드시 함수 블록의 시작 부분에서 다른 일반 문장보다 먼저 나와야 했다. 하지만 C99 이후의 최신 표준에서는 코드 블록 내 어디서든 Variable을 선언할 수 있다.
상수 선언 (Constant)
**Constant(상수)**는 초기화된 이후에는 값을 변경할 수 없는 Variable이다. const
키워드를 사용하여 선언하며, 선언과 동시에 반드시 초기화해야 한다.
// 형식: const 자료형 변수이름 = 값;
const double PI = 3.14;
자료형 별 특징
정수형 (Integer Types)
정수형은 부호 유무에 따라 signed
와 unsigned
로 나뉜다.
-
signed
: 부호를 가지는 정수를 의미하며, 최상위 비트(MSB, Most Significant Bit)를 부호 비트로 사용한다.MSB가 0이면 양수, 1이면 음수이다.
-
unsigned
: 0과 양수만을 표현한다.signed
에서 부호 비트로 사용되던 MSB까지 데이터 표현에 사용하므로, 양수 표현 범위가 약 2배로 늘어난다.unsigned
값을 출력할 때는%u
서식 지정자를 사용한다.
정수형은 크기에 따라 short
, int
, long
으로 나뉜다.
short
: 2바이트(16비트) 크기를 가지며, 표현 범위는 에서 까지이다.long
: 4바이트(32비트) 크기를 가지며, 표현 범위는 에서 까지이다.long
타입의 값을 출력할 때는%ld
서식 지정자를 사용한다.
오버플로 (Overflow)
**Overflow(오버플로)**는 Data Type이 표현할 수 있는 범위를 넘어서는 값을 저장할 때 발생하는 현상이다. 이 경우 값은 순환하게 된다. 예를 들어, signed int
의 최댓값에 1을 더하면 최솟값이 되고, 최솟값에서 1을 빼면 최댓값이 된다.
// overflow.c 예제
#include <stdio.h>
#include <math.h> // pow() 함수 사용을 위함
int main(void) {
int max = pow(2, 31) - 1; // int의 최댓값: 2147483647
int min = -pow(2, 31); // int의 최솟값: -2147483648
printf("max + 1 = %d\n", max + 1); // 결과: -2147483648
printf("min - 1 = %d\n", min - 1); // 결과: 2147483647
return 0;
}
문자형 (Character Type)
char
Data Type은 1바이트(8비트) 크기를 가지며, 문자를 저장하는 데 사용된다. 실제로 메모리에는 문자가 아닌, 해당 문자에 대응하는 정수(아스키 코드 값)가 저장된다. 따라서 문자형 Variable은 정수처럼 산술 연산이 가능하다.
char uppercase = 'A';
printf("A 다음의 두 번째 문자: %c\n", uppercase + 2); // 'C'가 출력된다.
경고음(\a
), 큰따옴표(\"
), 개행(\n
) 등 특별한 기능을 하는 문자들은 **출력 제어 문자(Escape Sequence)**를 사용하여 표현한다.
부동소수점형 (Floating-Point Types)
실수를 표현하기 위한 Data Type으로, 정밀도와 표현 범위에 따라 float
, double
, long double
순으로 커진다.
float
: 4바이트 크기. 소수점 이하 약 6자리까지 표현 가능하다.double
: 8바이트 크기.float
보다 정밀도가 높으며, 소수점 이하 약 15자리까지 표현 가능하다.long double
: Visual C++에서는double
과 동일한 8바이트 크기를 가진다.
자료형 크기 확인: sizeof
연산자
sizeof
연산자는 특정 Data Type이나 Variable이 메모리에서 차지하는 크기를 바이트 단위로 반환한다.
// 사용법
sizeof(자료형);
sizeof(변수이름);
기본 자료형 크기 요약
분류 | 자료형 | 저장 공간 크기 (바이트) | 표현 범위 |
---|---|---|---|
문자형 | char , signed char | 1 | −128∼127 |
unsigned char | 1 | 0∼255 | |
정수형 | short | 2 | −32,768∼32,767 |
unsigned short | 2 | 0∼65,535 | |
int , long | 4 | −2,147,483,648∼2,147,483,647 | |
unsigned int , unsigned long | 4 | 0∼4,294,967,295 | |
부동소수점형 | float | 4 | 약 ∼ (소수점 이하 6자리) |
double , long double | 8 | 약 ∼ (소수점 이하 15자리) |