Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[5842] Re:왕 초보 질문입니다.
kongbw, 광양 [kongbw] 1962 읽음    2006-10-26 23:06
일단 참, 거짓에 대한 이야기부터 해야겠네요.
C 언어의 조건검사에서 숫자 "0"은 거짓으로 해석되고  "0"이 아닌 수는 모두 참으로  해석합니다.


그 다음으로  && (AND) 연산과  || (OR) 연산에 대해서도 이야기 해보겠습니다.
AND 연산은 A "이고" B 일때 만족합니다.
- 난 어리고 이쁜 아가씨만 만난다.  
   ---> 이런 경우가 바로 AND 연산이죠. 두 가지 조건을 *모두* 만족해야 합니다.


OR 연산은 A "이거나" B 일때 만족합니다.
- 난 어리거나 이쁜 아가씨면 만난다.
   ---> 이럴 경우는 OR 연산입니다. 두 가지 조건 중에 *한 가지라도* 만족하면 됩니다.


여기서 한가지 더 알아두어야 할게 있는데...
그게 뭔가하면...

or 연산자는 두가지 조건을 모두 끝까지 살펴봐야 참인지 거짓인지를 알 수 있습니다.
당연한거죠... 두가지 중에 한가지라도 만족하면 참이니깐요.

미팅 껀수가 생겼다.
상대가 어린 아가씨 인가 확인!     ->   나이 많은 아가씨다. 
첫번째 조건을 만족하지는 못했지만 여기서 낙담하지 않고 이쁜지 확인해보자.
                                                 -> 이쁘다  --->  앗싸 미팅 계속




and 연산자는 두가지 조건 중에 하나라도 만족 못하면 나머지 조건을 체크하지 않고
중간에 그만둬 버립니다.  당연한거죠!

미팅을 껀수가 생겼다.
상대가 어린 아가씨 인가 확인!   -> 나이 많은 아가씨다.  --> 미팅 안함.

난   (1. 젊고)    (2. 이쁜 )  아가씨라야  미팅을 한다고 마음을 굳게 먹었습니다.
두가지 조건을 모두 만족해야 하는데... 첫번째 조건부터 삐꾸가 났다면
두번째 조건은 따로 더 살펴볼 필요가 없겠죠?!

나이 많고 이뻐도,
나이 많고 안 이뻐도 내가 미팅을 안할거라는 사실은 변함이 없기 때문입니다.

그래서 && 연산자를 수행할 때에는 효율성을 높이기 위해
중간에 조건을 만족시키지 못하는 경우가 생기면 다음 조건은 체크하지 않고 바로 건너 뛰어버립니다.




자~~ 이제 부터 님께서 올린 소스를 보고 설명해볼게요.

딴 라인은 다 제쳐두고   /*  a줄  */ 만 살펴보겠습니다.

:   (i=0)&&(j=3);   /*  a줄  */

편의상 다음과 같이 살펴보겠습니다.

(i=0) && (j=3);
*A*        *B*

&& 연산자 왼쪽에 있는 조건식부터 체크를 합니다.  바로  (i=0) 이죠.
그런데 (i=0)  은 조건식이 아닙니다.
그냥 문장이지만 컴퓨터는 시키는데로 수행을 합니다.

1.     i에 0을 대입합니다.
2.     그 다음에 i 값을 체크합니다.  
        조건식에서 0은 거짓이고, 0 이외의 값은 참이라고 위에 설명했지요?

3.     i 값을 체크하니깐 0 입니다.   0은 거짓!!!  
        그래서 && 연산을 만족시키지 못합니다. 이미 거짓이라는 게 확정되었기 때문에
        && 오른쪽에 있는 식은 따로 보거나 체크하지 않고 그냥 넘겨버립니다.
        그래서 j = 3 이라는 문장을 실행이 되지 않는거지요.

위에 1번에서 i에 0을 대입했기 때문에 i는 0이 되고
j 에는 처음 2를 대입한 뒤로 따로 건들지 않았기 때문에 그대로 2 값이 남아 있는 겁니다.


충분한 설명이 되었나 모르겠습니다...   그럼~~~  (^^)

+ -

관련 글 리스트
5840 왕 초보 질문입니다. Minic 2063 2006/10/25
5843     Re:왕 초보 질문입니다. 남병철.레조 2057 2006/10/27
5842     Re:왕 초보 질문입니다. kongbw, 광양 1962 2006/10/26
5841     Re:왕 초보 질문입니다. 금목암 2097 2006/10/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.