Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

문타쿠, 공부하다.

[C언어 코딩 도장] Unit 16. 자료형의 확장과 축소 알아보기 본문

C언어/C언어 코딩 도장

[C언어 코딩 도장] Unit 16. 자료형의 확장과 축소 알아보기

개발새발 문타쿠 2023. 8. 23. 03:11

서로 다른 자료형끼리 연산을 하면 어떤 현상이 발생할까?

16.1 자료형의 확장 알아보기

"정수와 실수를 함께 연산했을 때"

#include <stdio.h>

int main(void)
{
	int num1 = 11;
	float num2 = 4.4f;

	printf("%f\n", num1 + num2);
	printf("%f\n", num1 - num2);
	printf("%f\n", num1 * num2);
	printf("%f\n", num1 / num2);

	return 0;
}

  • 정수와 실수를 함께 연산하면 결과 값은 실수로 나온다. -> 실수가 정수보다 표현 범위가 넓기 때문
  • 자료형을 섞어서 사용하면 컴파일러에서 암시적으로 형 변환을 하게 되는데 자료형의 크기가 큰 쪽, 표현 범위가 넓은 쪽으로 자동 변환된다. 이를 형 확장이라고 하며 값이 버려지지 않고 그대로 보존된다.

"크기가 다른 정수끼리 연산"

#include <stdio.h>

int main(void)
{
	long long num1 = 123456789000;
	int num2 = 10;

	printf("%lld\n", num1 + num2);
	printf("%lld\n", num1 - num2);
	printf("%lld\n", num1 * num2);
	printf("%lld\n", num1 / num2);

	return 0;
}

  • 크기가 큰 쪽, 표현 범위가 넓은 long long으로 변환

16.2 자료형의 축소 알아보기

"실수를 정수로 변환하기"

#include <stdio.h>

int main(void)
{
	float num1 = 11.0f;
	float num2 = 5.0f;

	int num3 = num1 / num2;

	printf("%d\n", num3);

	return 0;
}

  • 실수에서 정수로, 표현 범위가 좁은 쪽으로 변환을 하게 되면 값의 손실이 생긴다.
  • 위와 같이 자료형의 크기가 작은 쪽, 표현 범위가 좁은 쪽으로 변환되는 것을 형 축소라고 한다.
  • 형 축소가 일어나면 값이 손실 즉, 값이 버려질 수 있다.

"크기가 다른 정수끼리 연산"

#include <stdio.h>

int main(void)
{
	char num1 = 28;
	int num2 = 1000000002;

	char num3 = num1 + num2;

	printf("%d\n", num3);

	return 0;
}