프로그래밍 언어/C

03. 자료형 변환 (Type casting)

coding-l7 2025. 6. 24. 15:41

📘 C 언어의 자료형 변환 (형변환 정리)

형변환은 크게 다음 두 가지로 나뉜다:

  • 자동 형변환(암시적)
  •  명시적 형변환(강제)

✅ 자동 형변환 (Implicit Casting)

컴파일러가 형이 다른 값들끼리의 연산 또는 대입에서 자동으로 자료형을 변환해주는 것을 의미한다.


🔸 대입 연산 시 자동 형변환

  • 정수 → 실수: 실수의 표현 범위가 넓기 때문에 손실 없이 변환 가능 단, 부동소수점 오차는 존재할 수 있다.
  • 실수 → 정수: 소수부가 잘림 (반올림 X)
  • 큰 정수 → 작은 정수: 상위 바이트가 손실될 수 있다. (예: int → char 변환)

📌 float 값을 int에 대입할 때 주의점

  1. 소수점 이하가 절삭된다. (반올림 ❌)
  2. float는 큰 정수를 정확히 표현할 수 없다. (유효숫자 한계)
  3. float 값이 int의 표현 범위를 벗어나면 오버플로우가 발생한다.

🔸 정수 승격 (Integral Promotion)

작은 정수형(char, short 등)은 연산 전에 자동으로 int 또는 unsigned int로 승격된다.

short num1 = 15, num2 = 25;
short num3 = num1 + num2;  // ⚠ num1과 num2는 int로 승격되어 연산됨
  • 연산 결과는 int형이기 때문에, 컴파일러 경고가 발생할 수 있다.

🔸 피연산자 간 자료형 불일치에 의한 자동 형변환

두 피연산자의 자료형이 다를 경우, 데이터 손실을 최소화하는 방향으로 자동 변환된다.

변환 우선 순위 (손실 최소화 기준):

int → long → long long → float → double → long double

예시:

double num1 = 5.15 + 19;  // 19는 int → double로 변환됨

🔹 참고: 상수의 형변환

const int a = 10;
double d = a;  // ✅ 자동으로 double로 형 변환됨

const는 수정만 금지할 뿐, 형 변환은 허용된다.


✅ 명시적 형변환 (Explicit Casting)

프로그래머가 형변환 연산자를 활용해 강제로 자료형을 변환하는 방식이다.


🔸 예제: 실수 나눗셈 문제

int num1 = 3, num2 = 4;
double divResult;

divResult = num1 / num2;
printf("나눗셈 결과: %f\n", divResult);

💥 출력 결과:

나눗셈 결과: 0.000000
  • num1 / num2는 int / int이므로 결과는 0 (정수 나눗셈)
  • 0이 나중에 double로 변환되어 0.000000이 출력된다.

🔧 원하는 결과를 얻는 방법

divResult = (double)num1 / num2;
// 또는
divResult = num1 / (double)num2;
  • 둘 중 하나를 double로 변환하면 나머지도 자동으로 double로 변환되어 실수 나눗셈 수행됨
  • 결과: 0.75

✅ 마무리 요약

구분 설명 주의사항
자동 형변환 컴파일러가 자동으로 타입 변환 손실 가능성 있음
명시적 형변환 (type)연산을 통해 프로그래머가 직접 변환 의미를 잘 이해하고 사용해야 함
정수 승격 작은 정수형 → int로 변환 연산에서 자주 발생
실수 연산 피연산자 하나만 실수여도 나머지도 변환 의도된 실수 연산은 명시적 변환을 추천