C언어 자료형과 정수 리터럴
요약
C언어의 정수 자료형(int, long, unsigned)과 리터럴 접미사(u, l, ul)를 알아봅니다. 정보처리기사 실기에서 자주 나오는 5u, 100L 같은 표현의 의미를 정리합니다.
정수 자료형 핵심 정리
| 자료형 | 크기 | 범위 |
|---|---|---|
char | 1바이트 | -128 ~ 127 |
unsigned char | 1바이트 | 0 ~ 255 |
int | 4바이트 | -2,147,483,648 ~ 2,147,483,647 |
unsigned int | 4바이트 | 0 ~ 4,294,967,295 |
long | 4 ~ 8바이트 | 시스템에 따라 다름 |
unsigned long | 4 ~ 8바이트 | 시스템에 따라 다름 |
정수 리터럴 접미사
5u, 100L처럼 숫자 뒤에 붙는 문자를 접미사(suffix) 라고 합니다. 접미사는 숫자의 자료형을 명시적으로 지정합니다.
| 접미사 | 의미 | 예시 |
|---|---|---|
u 또는 U | unsigned int | 5u, 100U |
l 또는 L | long | 5l, 100L |
ul 또는 UL | unsigned long | 5ul, 100UL |
char와 unsigned char
char는 1바이트(8비트) 크기의 정수 자료형입니다. 주로 문자를 저장하지만, 작은 정수를 저장할 때도 사용합니다.
| 자료형 | 크기 | 범위 |
|---|---|---|
char | 1바이트 (8비트) | -128 ~ 127 |
unsigned char | 1바이트 (8비트) | 0 ~ 255 |
unsigned char를 쓰는 경우
unsigned char는 비트 연산에서 8비트 단위로 계산할 때 자주 사용합니다.
~5의 결과가 int에서는 -6이지만, unsigned char에서는 250입니다. 8비트 범위(0 ~ 255)에서 모든 비트가 반전되기 때문입니다.
unsigned int를 쓰는 이유
1. 음수가 필요 없을 때
나이, 개수, 크기처럼 절대 음수가 될 수 없는 값에 사용합니다.
2. 더 큰 양수 범위가 필요할 때
같은 32비트에서 int는 약 -21억 ~ +21억, unsigned int는 0 ~ 약 42억까지 표현합니다.
| 타입 | 범위 (32비트 기준) |
|---|---|
int | -2,147,483,648 ~ 2,147,483,647 |
unsigned int | 0 ~ 4,294,967,295 |
3. 비트 연산에서 예측 가능한 결과
signed 타입에서 시프트 연산은 부호 비트 때문에 예상치 못한 결과가 나올 수 있습니다. unsigned는 항상 0으로 채워져서 결과가 명확합니다.
long을 쓰는 이유
int보다 더 큰 정수가 필요할 때 사용합니다. 시스템에 따라 int는 32비트, long은 64비트일 수 있습니다.
unsigned long을 쓰는 이유
음수 없이 아주 큰 양수가 필요할 때 사용합니다. 파일 크기, 메모리 주소 등에 자주 사용됩니다.
정보처리기사 실기 예시
연결 리스트 문제에서 자주 등장합니다.
여기서 5u, 7u, 11u는 모두 unsigned int 타입입니다. 구조체 멤버가 unsigned int x;로 선언되어 있기 때문에 타입을 맞춰준 것입니다.