정수와 실수를 선언하고 함께 연산하면 결과값은 실수로 나온다.
왜냐햐면 실수가 정수보다 표현범위가 더 넓기 때문이다.
C언어에서는 자료형을 섞어서 쓰면 컴파일러에서 암시적 형 변환(implicit type conversion)을 하게되는데
자료형의 크기가 큰 쪽, 표현 범위가 넓은 쪽으로 자동 변환된다.
이를 형 확장(type promotion)이라고 하며 값이 버려지지않고 그대로 보전된다.
크기가 다른 정수끼리의 연산을 살펴보자.
long long int가 int보다 크기(바이트)가 더 크다.
따라서 int와 long long int을 함께 연산하면 long long int로 변환된다.
11.0에서 5.0을 나누면 2.2이지만, 정수 자료형에서는 실수를 표현할 수 없다.
따라서 소수점 이하 자리가 버려진다. 이를 형 축소(type demotion)라고 한다.
문자 자료형 char도 정수 자료형이므로 int와 함께 연산해도 문제는 없다.
하지만 int와 함께 연산 후 char에 저장하면 char보다 큰 수는 저장할 수 없다.
여기에서는 int의 1000000002와 char의 28중에서 2와 28만 남아 연산된다.
이를 2진수로 변환해보자
int형 = 1000000002
char형 = 28
int형 : 0011 1011 1001 1010 1100 1010 0000 0010
char형 : 0001 1110
int는 4바이트(32비트)를 표현할 수 있지만 char는 1바이트(8비트)만 표현이 가능하다.
그래서 두 값을 더하여 char에 저장하면 비트 상 저장이 가능한 부분(2와 28)만 연산된다.
문자(정수) < 정수 < 실수
'C, C++' 카테고리의 다른 글
오늘 공부한 C언어(else를 사용하여 두 방향으로 분기하기 (0) | 2022.03.01 |
---|---|
오늘 공부한 C언어(if 조건문으로 특정 조건일 때 코드 실행하기) (0) | 2022.02.27 |
오늘 공부한 C언어 (나머지 연산하기) (0) | 2022.02.24 |
오늘 공부한 C언어 (곱셈, 나눗셈하기 / 원의 넓이 구하기) (0) | 2022.02.24 |
오늘 공부한 C언어 (덧셈, 뺄셈하기 / 증가, 감소 연산자 사용하기) (0) | 2022.02.23 |