C || 논리식 이후 변수값이 이상함.
조회수 441회
#include<stdio.h>
int main()
{
int a,b,c;
a=1;
b=2;
c=3;
printf("%d",(a=b)||(b=c));
printf("%d",b);
}
여기서 a
와b
와c
를 출력할때 a=2,b=2,c=3
이라고 출력되는데 a
에는 b
가 들어가고 b
에는 c
가 들어가니
a=2,b=3,c=3
으로 출력되는게 맞지않나요 ? 어디가 문제인지 알려주세요
1 답변
-
printf("%d",(a=b)||(b=c));
여기에서
a=b
까지만 진행하고,b=c
를 하지 않을 거에요.condA || condB
라는 논리식을 평가할 때,condA
가참
이라면,condB
는 평가해 볼 필요도 없이 전체 식이참
이 됩니다. 그래서a=b
가참
으로 평가되었기에,b=c
는 안하고 끝나요.이와 반대로
condA && condB
라는 논리식이 있고,condA
가 참이라면, 다음 논리식도 참인지 확인하기 위해condB
까지 평가해 보게 됩니다. 그래서 코드에서 이 부분을printf("%d",(a=b)&&(b=c));
로 바꾸고 실행해 보면, a, b, c 변수의 마지막 결과가 달라지는 걸 확인할 수 있을 겁니다.
댓글 입력