간단한 연산자 문제입니다..
조회수 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
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력