Language/C

📌 Chapter 04 - 변수와 자료형 - 자료형변환

e-cko 2025. 5. 17. 17:06
반응형
반응형

5. 자료형 변환이란?

1) 자료형 변환의 개념

  • 자료형 변환(type casting)이란, 선언된 변수의 기존 자료형을 다른 자료형으로 바꾸는 것을 의미한다.
  • C 언어에서는 다음 두 가지 방식으로 자료형 변환이 이루어진다.

자동 자료형 변환 (Implicit Casting)
강제 자료형 변환 (Explicit Casting)


2) 자동 자료형 변환

 자동 형변환의 개념

  • 자동 자료형 변환이란, C 컴파일러가 미리 정해놓은 규칙에 따라 자료형을 자동으로 변환하는 것을 의미한다.
  • 주로 서로 다른 자료형 간의 연산이 일어날 때 발생한다.
  • 연산 시에는 작은 크기의 자료형이 큰 크기의 자료형으로 자동 변환된다.

Visual Studio 기준 자료형 크기 순서

크기 순 (작은):
char < short < int < unsigned int < long < unsigned long < float < double < long double

2-1) 자동 형변환 규칙 예시

연산 시 규칙

  • char + short → 자동으로 int로 변환되어 연산된다.
  • int + float → int float으로 자동 변환되어 연산된다.
  • float 간의 연산은 실제로 double로 변환되어 계산된다.
  • ? + double → 모든 자료형은 double로 변환된다.
  • ? + unsigned → unsigned로 변환된다.

대입문에서의 규칙

  • 문자형 상수는 기본적으로 int으로 간주된다.
  • 대입문에서는 오른쪽 값이 왼쪽 변수의 자료형으로 변환된다.
  • 실수형을 정수형 변수에 대입하면, 소수점 이하가 잘린다. ⚠️ (정밀도 손실)

⛏️ 주의할 점

  • 실수형정수형 변환 시 소수점 이하가 무조건 버려진다. (반올림 아님!)
  • float 상수에 접미사 f를 붙이지 않으면, 기본적으로 double로 인식된다.

마무리 정리

1️ 자동 형변환은 크기가 작은 자료형이 큰 자료형으로 변환되어 연산된다.
2️
float 간의 연산도 실제로는 double로 변환되어 수행된다.
3️
대입문에서는 오른쪽 값이 왼쪽 변수의 자료형으로 변환된다.
4️
실수정수 변환 시 소수점 이하는 모두 버려진다.
5️
float 상수에는 반드시 접미사 f를 붙여야 float으로 인식된다.


💻 자동 형변환 예제 코드

#include <stdio.h>

 

int main() {

    char a = 10;

    short b = 20;

    int result1 = a + b; // char + short → int로 자동 변환되어 연산

 

    int c = 3;

    float d = 4.5f;

    float result2 = c + d; // int float으로 자동 변환

 

    float e = 3.14f;

    double f = 2.718;

    double result3 = e + f; // float → double로 변환되어 연산

 

    int i;

    i = 3.99; // 실수정수 대입: 소수점 이하 버려짐 (i = 3)

 

    printf("result1 = %d\n", result1);

    printf("result2 = %.2f\n", result2);

    printf("result3 = %.3f\n", result3);

    printf("i = %d\n", i);

 

    return 0;

}


3) 강제 자료형 변환

강제 형변환의 개념

  • 자동 형변환은 크기가 커지는 방향에서만 일어난다.
  • 작은 자료형으로 변환하거나 명확히 지정된 형변환이 필요한 경우에는, 프로그래머가 직접 강제 변환을 해야 한다.
  • 이때 사용하는 것이 캐스트 연산자(cast operator)이다.
  • 형식: (자료형)변수

⛏️ 주의할 점

  • 강제로 형변환하더라도, 값 손실(loss of data)이 발생할 수 있다.
  • 특히 정수실수, 실수정수, 큰 타입작은 타입으로 변환할 때 정밀도 문제에 주의해야 한다.

마무리 정리

1️ 자동 형변환은 컴파일러가 판단하여 이루어진다.
2️
강제 형변환은 캐스트 연산자를 사용해 명시적으로 수행한다.
3️
강제 형변환 시 값 손실이 발생할 수 있으므로 주의해야 한다.
4️
형변환을 잘못하면 프로그램의 버그로 이어질 수 있다.


💻 강제 형변환 예제 코드

#include <stdio.h>

 

int main() {

    double a = 5.67;

    int b;

 

    b = (int)a; // 강제 형변환: 소수점 이하 버려짐

 

    printf("원래 값: %.2f\n", a);

    printf("형변환 후 값: %d\n", b);

 

    return 0;

}


✳️ 자료형 변환은 자료형 간 연산의 정확성, 안정성, 성능과 밀접한 관계가 있다.
✳️ 의도하지 않은 형변환은 논리 오류나 예측 불가능한 결과를 낳을 수 있으므로 반드시 이해하고 사용해야 한다.

반응형