c언어 형 변환 질문 삼항연산자
float i;
int j ;
(j > 0 ? j : i)
저 삼항 연산자가 반환하는 값이 0보다 커도 작아도 float인데
혹시 이유가 뭔지 아시는분 ㅜㅜㅜ
제 생각에는 int에 float 가 들어가면 잘리니까 일부러 좀더큰 자료형으로 자동 변환되나 싶은데 맞나요??
55글자 더 채워주세요.
2개의 답변이 있어요!
안녕하세요.
아래와 같이 test를 해보시면
#include <stdio.h> int main() { int j=-1; double i=1.1111; int k = (j > 0 ? j : i); printf("%f\n",k); printf("%d %d %d",sizeof(i), sizeof(j), sizeof(k)); return 0; }삼항연산자의 조건식은 이를 대입하는 변수의 형에 의해서 결정이 됩니다. 위의 경우에는 삼항 연산자의 반환값은 항상 정수가 되고,
질문하신 경우라면 k의 자료형이 float였을것으로 생각됩니다.
본문의 코드를 보면 반환하는 타입을 혼합해서 사용을 하고 있습니다.
j는 타입이 int이고 i는 타입이 float입니다.
void solution() { float i = 12.1f; int j = 1; ??? result = (j > 0 ? j : i);따라서 j의 값이 0보다 클 경우에는 int 타입인 1이, 그 외에는 float 타입인 12.1 이 반환됩니다.
아래와 같이 두 가지 변수를 두고 볼 수 있습니다.
j 의 값 (j > 0 or j <= 0)
리턴 받는 타입(int or float)
따라서 경우의 수가 4가지가 존재하게 됩니다.
현재 define 을 이용해서 매크로를 쓴 것이 댓글에 적혀있는데 이것을 빼고 생각해보세요.
매크로로 인해서 인지 부하가 생길 수 있습니다.