C언어 형변환 (Casting)
선수학습(1개)
요약
C언어의 형변환을 정리합니다. 묵시적 형변환(자동 승격), 명시적 형변환((int)3.7 절단), 정수 나눗셈 vs 실수 나눗셈, 평균 계산 함정까지 정보처리기사 실기 대비 핵심 내용을 다룹니다.
형변환이란? 기초
형변환(Type Casting)은 한 자료형의 값을 다른 자료형으로 바꾸는 것입니다. 서로 다른 자료형끼리 연산하거나 소수점 자릿수를 더 정확하게 표현해야 할 때 사용합니다.
형변환에는 두 가지가 있습니다.
- 묵시적 형변환 (implicit, 자동으로) — 컴파일러가 자동으로 바꿉니다.
- 명시적 형변환 (explicit, 직접 써서) —
(자료형)문법으로 개발자가 직접 바꿉니다.
묵시적 형변환 — 컴파일러가 자동 기초
서로 다른 자료형끼리 연산하면, 표현 가능한 범위가 더 넓거나 소수까지 표현할 수 있는 자료형으로 자동 승격됩니다. 예를 들어 정수만 담는 int보다 소수까지 담는 double이 더 넓습니다. 자동 승격이란 더 넓은 자료형으로 자동 변환되는 것을 뜻합니다.
승격 우선순위: int → long → float → double (오른쪽으로 갈수록 표현 범위 또는 정밀도가 더 넓음)
두 피연산자 중 더 오른쪽에 있는 자료형으로 변환됩니다. char나 short는 연산 전에 먼저 int로 승격된 후 위 순서를 따릅니다. 직관과 다를 수 있는 점은 long이 float보다 왼쪽에 있다는 것인데, long은 정수 범위가 크지만 소수를 표현하지 못하므로 소수까지 다루는 float이 더 오른쪽입니다.

L 접미사는 해당 정수를 long 타입으로, f 접미사는 해당 실수를 float 타입으로 지정합니다.
이때 수학적 값(크기)은 변하지 않습니다. int 5와 double 5.0은 같은 수이지만, 메모리에 저장되는 형식이 바뀌는 것입니다.
명시적 형변환 — 개발자가 직접 기초
(자료형) 문법으로 개발자가 직접 변환합니다.
double → int 변환은 반올림이 아니라 절단1입니다. 절단이란 소수점 아래를 버리는 것으로, 양수 3.7도 3, 음수 -3.7도 -3이 됩니다. 두 경우 모두 0에 가까워지는 방향으로 잘립니다. (int)3.7은 4가 아니라 3입니다.
| 원본 값 | (int) 결과 |
|---|---|
3.7 | 3 |
3.2 | 3 |
-3.7 | -3 |
-3.2 | -3 |
정수 나눗셈 vs 실수 나눗셈 심화
C언어에서 / 연산은 양쪽 피연산자가 모두 정수이면 정수 나눗셈이 됩니다. 결과의 소수점 이하는 버려집니다.
r2가 2.5가 아닌 이유: 대입 연산자 =는 오른쪽 식을 먼저 다 계산한 뒤 그 결과를 왼쪽에 넣습니다. a / b는 두 피연산자 모두 int 이므로 승격 규칙이 발동하지 않고, 정수 나눗셈으로 2가 먼저 계산됩니다. 이 결과 2가 왼쪽 double에 대입되어 2.0이 됩니다. =의 왼쪽 타입(double)은 오른쪽 계산 결과에 영향을 주지 않고, 이미 버려진 소수는 돌아오지 않습니다.
평균을 구할 때 주로 이 함정에 빠집니다.
형변환의 결과를 화면에 어떤 모양으로 출력할지는 출력 함수 — 서식별 출력 비교에서 확인할 수 있습니다.
기초 문제
정보처리기사 실기 대비 문제
Footnotes
-
영어로 truncation. 소수점 이하를 무조건 버려 0 방향으로 이동시키는 방식입니다. ↩