C언어 증가,감소 연산자를 배우고 있었는데
int x=1, y=2, z=3;
x=++x*5;
y=y++*5;
z=5- --z;
printf(" x = %d , y = %d , z = %d \n",x,y,z);
return 0;
이렇게 쳤습니다.
실행하면 어떻게 될까요?
.
.
.
x=10, y=10, z=3
이렇게 나옵니다.
하지만, 이는 틀렸습니다
심지어 책에도 y=11 이라고 써 있었습니다.
그리고 저 또한, y는 11이 나와야 맞다고 저는 생각합니다
왜냐면 y=2 였기 때문에, 연산할 때는 2*5=10 이지만, 나중에 후치환 해 줘서 +1 , 결국 11이 되야한다고 생각 하기때문에!
...... 그러면 컴퓨터는 왜 이런 결과를 냈을까요???
'희대의 미스테리' 라면서 교수님이 다시 생각해 오신다고 하시곤 수업이 끝났어요
실화입니다.
-------------------------------------------질의응답후-------------------------------------------
많은 분들이 경험으로 알게된 좋은 정보를 댓글로 많이 달아주셨습니다.
요약 하자면,
컴파일러 에서 저런 행동양식의 우선순위를 정하지 않아, 해석을 제맘대로 하기 때문에,
루프문 이외에선 저런 걸 쓰지 않는게 좋다. 라는 결론을 얻었습니다.
본삭금 걸고 제목 바꾸었습니다.