논리연산에 대해서 물어봅니다.
소미
질문 제목 :
논리연산에 대하여 질문해봅니다.#include stdio.hint main(void)
{
int a = 10, b = 20, c = 3; c =(a++ == 11) && (b-- == 20);
printf(a = %d \n, a);
printf(b = %d \n, b);
printf(c = %d \n, c);
printf(a + b + c = %d \n, a + b + c);
}질문 내용 :
a = 11
b = 20
c = 0
a + b + c = 31
이 나옵니다. 요기서 질문 해봅니다.
(a++ == 11)이 맞다는거죠? (그럼 ture = 1)
(b-- == 20) 도 맞다는거죠? (그럼 ture = 1)
그럼 c = 1이 나와야 하는거 아닌가요??
왜 c =(a++ == 11) && (b-- == 20); 가 0 이 되는지 이해가 안되서요
-
유진깡
아 그리고 비주얼 스튜디오를 쓰신다면 c = (a++ == 11) && (b-- == 20); 이부분에 F9 누르셔서 디버깅을 하시면서 값을 보시면 더욱 이해가빠릅니다 ㅎ
-
해긴
전위 후위를 보시면 압니다~
c = (a++==11)&&(b-- == 20) 후위는 이문장이 지나가고나서 증가가 됩니다. 그러니 출력할때는
1이 증가한 11이 나오는 겁니다. 그리고 c가 0이 되는 이유는 이문법에서 FALSE가 나오기 때문에 값이
0이 나오는겁니다~
11이 나올려면 c = (++a == 11) && (b-- == 20) 으로 하시면 됩니다.
하지만 이렇게 하셔도 값은 31이 나옵니다. 증가, 감소연산자에 전위 후위를
이해하시면 -
해가빛
약간 알것 같기도 하고 애매모호하지만 대충은 알것 같기도 합니다.
감사합니다. -
샤르
A++ == 11이말은 A의 현재상태와 11을 비교한후 ( ++연산이 포함된 식이 끝난후에 증가하는거에요) 후위증가라고하나요 이걸? 어려운말은 필요없고 님말 대로라면 ++A로 해야되요 먼저 A가 증가하고 비교연산을 진행하는거죠
-
시나브로
말장난같아서 죄송한데...왜 10이에요?ㅋ
a++해줘서 11이 아닌가요?
printf(\a = %d\\n\ -
사라
아직 10이니까요 ㅋㅋ
-
여름
a++ == 11은 다음 두줄과 같습니다.
a == 11
a += 1
고로 11과 비교순간엔 아직 증가 안한거죠 -
예님
a++ == 11이 왜 false에요?
-
재바우
a++ == 11이 false이기 때문에 &&연산의 결과는 확정적이라 b-- == 20은 아예 연산되지 않습니다.
따라서 false로 c는 0이 됩니다.
b는 연산이 이루어지지 않았기 때문에 당연히 20 그대로고요