아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
다부진캥거루19
다부진캥거루1921.04.25

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였을것으로 생각됩니다.


  • 탈퇴한 사용자
    탈퇴한 사용자21.04.26

    본문의 코드를 보면 반환하는 타입을 혼합해서 사용을 하고 있습니다.

    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 이 반환됩니다.

    아래와 같이 두 가지 변수를 두고 볼 수 있습니다.

    1. j 의 값 (j > 0 or j <= 0)

    2. 리턴 받는 타입(int or float)

    따라서 경우의 수가 4가지가 존재하게 됩니다.

    현재 define 을 이용해서 매크로를 쓴 것이 댓글에 적혀있는데 이것을 빼고 생각해보세요.
    매크로로 인해서 인지 부하가 생길 수 있습니다.