#include <stdio.h>
int
main(void)
{
int a = 0;
int b = 0;
int c = 0;
a++ || b++ && c ++ ;
printf ("a = %d, b = %d, c = %d\n", a, b, c);
return 0;
}
a = 1, b = 1, c = 0
위 와 같은 결과가 나오는 것은 C의 연산자 우선 순위 때문이다.
C 에서는 && 가 || 보다 우선 순위가 높다. 그래서 위의
a++ || b++ && c++ 은 a++ || ( b++ && c++) 와 동일한 문장이다.
Short Circuit에 의해서 먼저 a++이 연산이 되는데,
1) a++이 판단되는데, a = 0 이므로 거짓이 되고, a++ 이 수행되므로 a = 1 이된다.
2) 앞 구문이 거짓이므로 b++ && c++ 가 수행되는데, b = 0 이므로 && 조건에 의해
c++은 수행되지 않는다. 단, b++에 의해서 b = 1 이된다.
그래서 a++ 과 b++만 수행되고, c++은 수행 되지 않으므로
a = 1, b = 1, c = 0 이 된다.
int a = 0;
0040101E mov dword ptr [a],0
int b = 0;
00401025 mov dword ptr [b],0
int c = 0;
0040102C mov dword ptr [c],0
a++ || b++ && c ++ ;
00401033 mov eax,dword ptr [a]
00401036 mov ecx,dword ptr [a]
00401039 add ecx,1
0040103C mov dword ptr [a],ecx
0040103F test eax,eax
00401041 jne main+5Ch (40105Ch)
00401043 mov edx,dword ptr [b]
00401046 mov eax,dword ptr [b]
00401049 add eax,1
0040104C mov dword ptr [b],eax
0040104F test edx,edx
00401051 je main+5Ch (40105Ch)
00401053 mov edx,dword ptr [c]
00401056 add edx,1
00401059 mov dword ptr [c],edx
'Coding > CPP 삽질기' 카테고리의 다른 글
Copy & Paste 신공 (0) | 2008.03.08 |
---|---|
심심풀이 프로그래밍...2 (0) | 2007.09.17 |
비트 연산자 (0) | 2007.04.24 |