03. 자료형 변환 (Type casting)

2025. 6. 24. 15:41·프로그래밍 언어/C

📘 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로 변환 연산에서 자주 발생
실수 연산 피연산자 하나만 실수여도 나머지도 변환 의도된 실수 연산은 명시적 변환을 추천

'프로그래밍 언어 > C' 카테고리의 다른 글

05. 함수 포인터 (Function pointer)와 void 포인터  (0) 2025.06.27
04. 포인터와 문자열  (2) 2025.06.26
02. 상수(Constant)  (0) 2025.03.31
01. 실수 표현 (고정 소수점과 부동 소수점)  (0) 2025.03.31
'프로그래밍 언어/C' 카테고리의 다른 글
  • 05. 함수 포인터 (Function pointer)와 void 포인터
  • 04. 포인터와 문자열
  • 02. 상수(Constant)
  • 01. 실수 표현 (고정 소수점과 부동 소수점)
coding-l7
coding-l7
  • coding-l7
    coding-l7rl0
    coding-l7
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 기타
      • 유니티
        • OfficeWorkerRunning
      • 프로그래밍 언어 N
        • C N
        • C#
        • C++
      • CS
        • 컴퓨터 구조
        • 운영체제
      • 물리 기반 시뮬레이션
        • 기초
        • Cloth Simulation
        • Fluid Simulation
      • 코딩 테스트
        • 프로그래머스
        • 백준
      • 독서
        • [ 뇌를 자극하는 윈도우즈 시스템 프로그래밍 ]
        • [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]
        • [ CUDA 기반 GPU 병렬 처리 프로그래밍 ]
      • 영어
        • Basic Grammar In Use
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 포트폴리오
  • 공지사항

  • 인기 글

  • 태그

    물리 기반 시뮬레이션
    screen-space rendering
    fluid implicit particle
    GLSL
    collision
    파동 난류
    surface turbulence
    fluid simulation
    시스템 프로그래밍
    정수 승격
    입자 기반 방법
    RAM
    컴퓨터 구조
    cloth simulation
    jump table
    bilateral blur
    명령어
    narrow range filter screen-space fluid rendering
    Flip
    액체 시뮬레이션
    OpenGL
    screen space fluid rendering
    pbd
    position based dynamics
    wave simulation
    그리드 기반 방법
    C언어
    상수
    실수
    유체 시뮬레이션
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
coding-l7
03. 자료형 변환 (Type casting)
글쓰기
상단으로

티스토리툴바