double c= int a/ double b;
int인 a를 double인 b로 나누면 결과는 double??int???
정답! double!!!
CPU는 같은 자료형의 두 피연산자를 대상으로만 연산이 가능하도록 설계되어 있습니다. (a와 b가 피연산자이다.)
그러므로 a와 b는 컴파일 에러가 떠야하는데 어떻게 실행이 되는걸까요?
답은 '자동 형 변환'이 일어나기 때문입니다.
직관적으로 생각했을때 보다 넓은 수의 범위를 포함하는 자료형으로 자동 형 변환이 일어납니다.
int는 정수고 double은 소수점까지 포함하니까 직관적으로 int가 double로 승격이 일어나는거!!!
책을 보면
int -> long -> long long -> float -> double -> long double 순으로 자동 형 변환이 일어난다고 되어 있습니다.
한 가지 더!!
double c= int a/ int b; 일때
연산결과의 자료형은(double c) 피연산자의 자료형과(int a, int b) 일치한다고 한다고 합니다.
그러니까 double c= int a/ int b; 일때 c의 값은 int로 계산된 이후 출력이 되는 것입니다.
double c = 2/3; 이라는 문장이 있어도 답이 소수점으로 나오지 않고 0으로 계산된 이후 double 형으로 출력이 되어 0.00으로 표기됩니다.
혹여 int c = int a/ double b; 라면
피연산자 중에 double형이 있기에 자동 형 변환으로 int a가 double로 바뀌어서 double a/ double b로 계산됩니다.
그러나 double로 계산된 값은 int 형으로 바뀌어 출력됩니다! 즉 소수점 밑의 값이 절삭되는 것입니다.
이 글에서 알 수 있는 건 피연산자들끼리 같은 자료형이 된다는 자동 형 변환!
그리고 연산결과는 피연산자의 자료형을 따라간다는 사실입니다.
끝
'개발 공부 > C언어' 카테고리의 다른 글
#8 C언어 배열이름 앞에는 왜 &를 안 붙일까? (0) | 2022.08.01 |
---|---|
#7 C언어 포인터 변수의 크기, 1비트는 몇 바이트일까 (0) | 2022.08.01 |
#5 C언어 (++i, i++) 후위연산 전위연산 차이점 쉽게 이해하는 법 (0) | 2022.07.31 |
#4 C언어 main에서 return 0, return -1 의 뜻 (0) | 2022.07.31 |
#3 C언어 재귀함수를 쉽게 풀어서 설명해보았습니다. (0) | 2022.07.31 |
댓글