연산에 대한 궁금한점 입니다
조은
질문 제목 : 연산에 대한 궁금한점 입니다질문 내용 :
변수에 논리연산자가 들어가게 되면 어떻게 연산을 하는지...??
그리고 z값이 2가 아닌 1이 나오는 이유도...??
int x = -1, y = -1, z = 1, k;
k = ++x || ++y && ++z;
printf(%d %d %d %d, k, x, y, z);
-
슬아s
초보자들에게 설명하기가 힘들어요.
-
꽃가을
실전에서 저렇게 코딩을 하면 회사에 못 다니게 됩니다. 하하.
-
지후
책을 다시 쓰던 지 해야지 원...
++ 연산자가 왜 빠르다고 되어 있는 건지....
아니면 최적화의 부작용? -
호시
논리연산자가 들어가게 되면 참이면 1이 되고, 거짓이면 0이 됩니다.
k = ++x || ++y && ++z;
는
k = 0 || 0 && 2;
기 됩니다.
거짓하고 거짓을 OR하면 거짓이 됩니다.
거짓하고 참하고 AND를 하면 거짓이 됩니다.
따라서 k는 거짓의 값인 0이 됩니다.
출력 결과
0 0 0 1
k = 0 && ++z;
연산에서
AND 연산은 앞의 것이 거짓이면 뒤의 것을 신경을 안 쓰게 됩니다. 하나마나 0이 되니까요.
즉 ++z 연산이 -
콩알녀
쓰고 보니까 또 쓸게 잇고 쓰고 보니까 또 쓸게 잇어서요 ㅎ;;
-
소년틳터프
길게 하나 쓰고 있었는데. 짧게 5개를 썼군요. 하하.
-
율하
그리고 최종 k에는 참이면 1, 거짓이면 0이 들어갑니다.
-
나라찬
k = ++x || ++y && ++z;
에서 ++x 부분이 거짓이면,
++y && ++z 부분으로 넘어가는데
&&인경우 앞에꺼가 거짓이면 뒤에꺼가 거짓이든 참이든 상관없이 전체는 거짓이므로
&&이후의 ++z는 평가되지 않아서 z값은 증가하지 않습니다. -
바다
즉
k = ++x || ++y && ++z;
에서 ++x부분이 참이면 이후 ++y는 평가되지 않아서, y값은 증가하지 않습니다. -
초코향
왼쪽부터 연산하는데
만약 연산하는 도중에 이후의 연산을 하지 않아도 평가 결과가 정해진경우는
이후의 연산은 하지 않습니다.