간단한 연산자 문제입니다..

조회수 2268회

package sec06.exam03;

public class Exercise02 {

public static void main(String[] args) {
    int x = 10; 
    int y = 20;
    int z = (++x) + (y--);
    System.out.println(z);//30

}

}

답이 30이 나와야 정상이 아닌가요..? 왜 31이 나오는지 이해가 안갑니다. ++x의 값은 11이고 y--값은 19아닌가요? y--를 풀어서 쓰자면 y= y-1; 인걸로 알고 있는데.. 왜 31이 나오는지 궁금합니다.

3 답변

  • 무엇을 먼저 계산하느냐에 의한 것이에요. x++ 같은 경우에는, x에 1을 증감시켜준다. ++x 같은 경우에는, x에 1을 증감시켜준다. 그런데, 두 경우가 모두 동일한 것이라면 굳이 미묘하게 다른 두 표기법을 쓸 필요가 없겠죠? 만약에 프로그래밍 언어를 만든 사람이 바부라면 그럴지도 모르겠지만. 일단 바부는 아닌 것 같고, 실제로도 아니니까요.. z = ++x 의 계산 순서는 (2)z = (1)x+1. 즉 x+1을 먼저 계산하고 z에 그값을 저장합니다. z = x++ 의 계산 순서는 (1)z = x (2) x = x+1 입니다.

    public static void main(String[] args) {
        int x = 10; 
        int y = 20;
        int z = (++x) + (y--);
      /*y--죠? 이 줄의 연산에서 y-1를 모든 연산이
        끝나고 난 뒤에. 가장 꼴찌로 한다는 거에요. ()로 묶여 있으니까,
        y--가 = 연산자보다 먼저 될 것 같지만 그렇지 않죠?
        저도 처음알았어요. 그런데 그건 언어규칙이니깐요.
        그냥 java를 만든사람이 그렇게 하기로 약속한거에요.
        언어의 일관성을 유지하기 위해서요! 
       그러니까 괄호 연산자마저 가장 나중으로 미루어버리는거죠!*/
        System.out.println(z);//30
    
    
    }
    
  • 증감연산자(++, ---) 기호가 앞에 붙고 뒤에 붙고에 따라 연산이 다릅니다.

    z = (++x) + (y--)    // 31
    z = (++x) + (--y)    // 30
    
  • 식에도 값이 있다고 생각하면 됩니다. 즉, '++x'나 'x++'같은 것도 다 값이 있다고 생각하는 것이죠. 그 내용은 다음과 같이 정리됩니다.

    x++      // x
    ++x      // x+1
    x--      // x
    --x      // x-1
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)