result = a < b ? b++ : --c;
printf("%d", "%d", "%d\n", result, b, c);
라고 되어있는데 실행 결과가
result는 200, b는 201 인것 까지는 이해를 했는데
c는 출력에서 a가 b보다 작지 않을때 299로 나오고 작으면 b만 연산하고 그냥 300으로 나오나요??
--c에서 전치연산으로 이미 1을 뺀 상태로 printf으로 넘어오는게 아닌가요??
이게 맞다면 만약 a가 b보다 작지 않으면 실행결과에 c는 299 로 나오고 b는 연산을 안하고 200으로 나오나요?
안녕하세요 길벗수험서 운영팀입니다.
예, 삼항연산자에서 참, 또는 거짓인 경우 반대 조건일 때의 식은 수행되지 않으므로, 전치 후치가 연산되지 않습니다.
때문에 a<b ? b++ : --c 에서 a가 b보다 작다면 --c는 수행되지 않게 되죠.
반대로 a가 b보다 크거나 같다면 b++은 수행되지 않고 --c만 수행되어, b는 기존의 값 200을 그대로 갖고 있게 됩니다.
전치, 후치 연산은 해당 식이 반드시 수행이 되어야 적용이 됩니다. 삼항연산자 및 if와 같은 조건문에서 해당 식을 수행하지 않고 넘어가는 경우 전치 및 후치 연산은 적용되지 않습니다.
행복한 하루되세요 :)
-
관리자2020-04-23 22:15:08
안녕하세요 길벗수험서 운영팀입니다.
예, 삼항연산자에서 참, 또는 거짓인 경우 반대 조건일 때의 식은 수행되지 않으므로, 전치 후치가 연산되지 않습니다.
때문에 a<b ? b++ : --c 에서 a가 b보다 작다면 --c는 수행되지 않게 되죠.
반대로 a가 b보다 크거나 같다면 b++은 수행되지 않고 --c만 수행되어, b는 기존의 값 200을 그대로 갖고 있게 됩니다.
전치, 후치 연산은 해당 식이 반드시 수행이 되어야 적용이 됩니다. 삼항연산자 및 if와 같은 조건문에서 해당 식을 수행하지 않고 넘어가는 경우 전치 및 후치 연산은 적용되지 않습니다.
행복한 하루되세요 :)