대입 연산을 하는 경우에 대입 연산자를 기준으로 오른쪽에서 왼쪽으로 자동 형변환이 일어난다.
대입 연산을 할 때는 대입 연산자의 오른쪽 값이 왼쪽 값의 자료형으로 자동으로 자료형이 변환됩니다.
자동 형변환에서 프로그래머가 유의할 점은 의도하지 않는 형변환 때문에 발생하게 되는 데이터 손실을 이해하는 것입니다.
다음 예제를 가지고 대입 연산을 하는 경우 자동 형변환의 방향을 이해하고 데이터 손실을 이해해 보겠습니다.
4행에서 정수는 int형 연산이 가장 빠르기 때문에 컴파일러는 130을 int형으로 자동 형변환을하고, 변수 numl(char형)에 저장합니다. 이때 다음 그림처럼 대입 연산자를 기준으로 오른쪽에서 왼쪽으로 자동 형변환이 일어나서 int형 데이터 130이 char형으로 자동 형변환됩니다.
char형 변수 num1은 -128 ~ 127 사이의 표현 범위를 갖고 있기 때문에 오버플로우가 발생합니다. 즉, int형 데이터 130이 char형으로 자동 형변환되면서 오버플로우가 발생합니다. char형의 표현 범위를 넘어선 오버플로우이므로 최솟값에서 -2 작은 값인 -126이 변수 numl에 저장됩니다. 이미 정수형의 오버플로우와 언더플로우에서 언급했으니 이가 안 된다면 복습하기 바랍니다.
자료형이란 무엇인가 - 오버플로우와 언더플로우
정수형의 오버플로우와 언더플로우는 순환된 값을 출력한다. 우리는 이전에 각 자료형의 데이터 표현 범위(최소값, 최대값)을 배웠습니다. 이렇듯 각 자료형에는 데이터 표현 범위가 존재하는
jcoding7.tistory.com
5행에서 3.14는 실수형 자료형입니다. 대입 연산자를 기준으로 오른쪽 값이 왼쪽 값의 자료형으로 자동 형변환된다고 하였으므로 실수형 3.14를 int형으로 자동 형변환을 하고, 변수num2에 저장합니다. 다음 그림처럼 3.14가 int형으로 자동 형변환이 되었으므로 0.14는 사라지고 따라서 0.14만큼의 손실이 발생하여 변수 num2에 최종적으로 저장된 값은 3입니다.
6행에서 대입 연산자를 기준으로 오른쪽 3(int형)이 왼쪽 변수 num3(double형)에 저장되고 있습니다. 다음 그림처럼 int형 3은 double형으로 자동 형변환이 되어 변수 num3(double형)에 저장됩니다. 변수 num3에는 3,000000이 저장됩니다.
형변환 시 작은 자료형이 큰 자료형으로 변환되는 방향일 때 데이터의 손실이 최소화되는데, 결론적으로 데이터의 표현 범위가 넓은 자료형으로의 형변환은 데이터의 손실이 발생하지 않지만 데이터의 표현 범위가 좁은 자료형의 변환은 데이터의 손실이 발생할 수 있습니다.
'프로그래밍언어 > C언어' 카테고리의 다른 글
typedef를 이용한 자료형의 재정의 (0) | 2022.01.14 |
---|---|
프로그래머가 강제로 형변환을 해준다 - 강제 형변환 (0) | 2022.01.12 |
자료형 변환 - 자동형변환(산술연산자) part1 (0) | 2021.12.30 |
자료형이란 무엇인가 - 문자형 (0) | 2021.12.28 |
실수형은 double형을 선호한다. (0) | 2021.12.24 |
댓글