p54 문제 2번 d % b + ++a * c-- || c- --a >=10 에서
↑ ↑
l l
질문 부분들
정수형 변수 a=3, b=4, c=5, d=6으로 선언된 경우
--a에서 전치연산이므로 a는 2가 되어 코드를 수행해야 하지 않습니까?
그리고
논리연산자 || 앞 c--가 후치연산으로 ++a * c--에서 3*5로 15 결과가 나오는 과정까지는 이해했습니다.
그렇다면 논리연산자 || 뒤의 c는 한 번 연산이 끝났으므로 4가 되어야 하지 않나요??
저는 c - --a가 4 - 2 로 2가 되는 결과를 얻었습니다.
그러나 해설에는 c - --a가 5 -3 으로 2가 된다고 서술되어 있습니다.
결국, 2가 되는 결과자체는 변함이 없습니다만 그 과정에서 유튜브 강의와 교재 해설에 의문점이 들어서 질의합니다.
제가 이렇게 생각한 근거는 다음과 같습니다.
앞 장 p 52 ~53에서
6번 문제 a+= ++a % b++ ? c* d :b /c; 코드수행 풀이과정을 보면
조건연산자 ? 앞의 b++에서 b는 2로 연산되었고 그 이후
조건연산자 ? 뒤의 b/c에서 b는 한 번의 연산이 끝났으므로 후치 증가 연산으로 적용되어 b가 3이되어 b/c의 결과는 1이 된다고 서술되어 있습니다.
안녕하세요 길벗수험서 운영팀입니다.
먼저 알아두실 것은 C언어에서는
1. 전치 후치 연산을 할 때, 해당 식에 사용되는 모든 전치연산자가 식 수행 전에 전부 연산되고, 해당 식이 종료된 이후 모든 후치연산자가 연산됩니다.
2. 전치/후치 연산자가 하나의 '식'을 기준으로 식 앞/뒤에서 계산이 이루어진다는 것을 기억하세요.
말씀하신 52~53쪽의 삼항연산자의 경우는 3개의 식으로 나뉘어져 있습니다.
조건식 ? 식1 : 식2;
때문에 조건식에서 전/후치 연산자가 한번 수행, 식2에서 전/후치 연산자가 한번 수행되게 되죠.
(참인 경우, 조건식과 식1에서 두번 전/후치 연산자가 수행됨)
반면, 54쪽의 문제 2번의 경우에는 전체 문장이 하나의 식입니다.
때문에 전체 식 수행 전/후로 전치/후치 연산자가 수행되게 되죠.
1번에 해당하는 --a, 3번에 해당하는 ++a가 식 계산 전에 수행되어 a는 결국 원래 값인 3이 연산에 사용되고,
2번에 해당하는 c--는 식 계산 후에 수행되어 원래 값이 5가 연산에 사용되게 되죠.
행복한 하루되세요 :)
-
관리자2020-06-25 11:36:26
안녕하세요 길벗수험서 운영팀입니다.
먼저 알아두실 것은 C언어에서는
1. 전치 후치 연산을 할 때, 해당 식에 사용되는 모든 전치연산자가 식 수행 전에 전부 연산되고, 해당 식이 종료된 이후 모든 후치연산자가 연산됩니다.
2. 전치/후치 연산자가 하나의 '식'을 기준으로 식 앞/뒤에서 계산이 이루어진다는 것을 기억하세요.
말씀하신 52~53쪽의 삼항연산자의 경우는 3개의 식으로 나뉘어져 있습니다.
조건식 ? 식1 : 식2;
때문에 조건식에서 전/후치 연산자가 한번 수행, 식2에서 전/후치 연산자가 한번 수행되게 되죠.
(참인 경우, 조건식과 식1에서 두번 전/후치 연산자가 수행됨)
반면, 54쪽의 문제 2번의 경우에는 전체 문장이 하나의 식입니다.
때문에 전체 식 수행 전/후로 전치/후치 연산자가 수행되게 되죠.
1번에 해당하는 --a, 3번에 해당하는 ++a가 식 계산 전에 수행되어 a는 결국 원래 값인 3이 연산에 사용되고,
2번에 해당하는 c--는 식 계산 후에 수행되어 원래 값이 5가 연산에 사용되게 되죠.
행복한 하루되세요 :)