바로 위 문제 2번에서는 감소 연산자로 a값이 2지만 그 다음 증가 연산이 와서 최종 계산할때 a값을 다 3으로 계산하셨는데
기출문제 1번은 왜 a값을 ㄱ,ㄴ을 따로 주어지나요?
제가 생각했을때는 a값을 2번의 감소 연산으로 3으로 생각했는데 각각 다르게 보셔서 모르겠어요.
그리고 만약 각각 다른 값으로 계산하면 우선순위에 따라 단항연산자라서 해설 ㄴ 부터 계산을 하는걸로 생각했어요.
그래서 ㄴ을 4로보고 ㄱ을 3으로 봐야하는거 아닌가요?
비전공자라 상세한 답변 부탁드려요
안녕하세요 길벗수험서 운영팀입니다.
먼저 우선순위부터 말씀드리면, 단항 연산자의 우선순위의 결합규칙은 단항 연산끼리 묶여 있을 때만 그 우선순위가 적용됩니다.
예를 들어 ++~a와 같은 경우 ~(not)이 적용된 후, ++이 적용되는 방식이죠.
문제와 같이 각 항이 떨어져 있는 경우에는 결합규칙이 적용되지 않습니다. 결합규칙은 항상 동위에 있는 경우에만 적용되죠.
그리고 단항 연산자의 계산 방식은 C언어와 Java를 구분하여 기억해두셔야 합니다.
현재 이해하고 계신 방식은 C언어 입니다.
문제의 코드를 C언어로 실행하는 경우 말씀과 같이 c는 3%3이 되어 0을 저장하게 되고,
d는 25가 됩니다.
C언어는 '식'을 기준으로 선치, 후치를 계산하기 때문이죠.
반면 Java는 식이 아닌 '항'을 기준으로 선치, 후치를 계산합니다.
이에 따라 --a % --a가 있는 경우 앞의 항인 --a에 따라 앞의 항은 4로, 뒤의 항은 3으로 계산되어 나머지인 1이 c에 저장되고,
b++ * b++은 앞의 항에서는 5가, 뒤의 항에서는 앞의 항의 후치연산에 따라 6이 되면서 30이라는 값이 나오게 됩니다.
(연산에 포함되지는 않지만 b는 식이 끝난 후 7이 되겠죠)
행복한 하루되세요 :)
-
관리자2023-06-21 09:54:15
안녕하세요 길벗수험서 운영팀입니다.
먼저 우선순위부터 말씀드리면, 단항 연산자의 우선순위의 결합규칙은 단항 연산끼리 묶여 있을 때만 그 우선순위가 적용됩니다.
예를 들어 ++~a와 같은 경우 ~(not)이 적용된 후, ++이 적용되는 방식이죠.
문제와 같이 각 항이 떨어져 있는 경우에는 결합규칙이 적용되지 않습니다. 결합규칙은 항상 동위에 있는 경우에만 적용되죠.
그리고 단항 연산자의 계산 방식은 C언어와 Java를 구분하여 기억해두셔야 합니다.
현재 이해하고 계신 방식은 C언어 입니다.
문제의 코드를 C언어로 실행하는 경우 말씀과 같이 c는 3%3이 되어 0을 저장하게 되고,
d는 25가 됩니다.
C언어는 '식'을 기준으로 선치, 후치를 계산하기 때문이죠.
반면 Java는 식이 아닌 '항'을 기준으로 선치, 후치를 계산합니다.
이에 따라 --a % --a가 있는 경우 앞의 항인 --a에 따라 앞의 항은 4로, 뒤의 항은 3으로 계산되어 나머지인 1이 c에 저장되고,
b++ * b++은 앞의 항에서는 5가, 뒤의 항에서는 앞의 항의 후치연산에 따라 6이 되면서 30이라는 값이 나오게 됩니다.
(연산에 포함되지는 않지만 b는 식이 끝난 후 7이 되겠죠)
행복한 하루되세요 :)