PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/06/15 18:24:59
Name Chloe
Subject C언어 질문하나드릴게요.
좀 기초적인건데 맨날 수업시간에 맨날자서 책을봐도 모르겠네요

친구들이랑 답이 달라서 한번 ...

문제는

int  x = 5;

if ( x < 2 && x = 1)
   x=2;

printf("%d\n", x);

이 거의 출력표현을 쓰라는건데요
책을보니까 &&전에가 틀리면 0으로 출력된다길래 0인줄알았는데
딴 애들은 답이 5라네요?
흠,, 제가 수업시간에 돌려봤는데
에러가 한개뜨고..  대체 뭐가잘못됐는지..
답좀 알려주실분 있으신가요?

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
09/06/15 18:29
수정 아이콘
답은 5 가 맞습니다.

위에서 5로 선언한 후 밑의 if문을 적용받지 않았기 때문에 5가 그대로 출력되는 것이죠.

그리고 비교문은 '=' 이 아니라 '==' 입니다.

이거 은근히 많이 틀리는 것이죠.
09/06/15 18:31
수정 아이콘
if 조건문에서 x=1 이 아니라 x==1로 써야 할 거 같습니다.
MoreThanAir
09/06/15 18:32
수정 아이콘
일단 에러가 생기는 이유는 연산자의 우선순위 때문입니다. 현재 쓴 코드에서는 && x 가 먼저 인식이 되어서 =1이 들어갈 l-value(메모리)가 정의 되어있지 않은 상태입니다.
x<2 && (x=1) 이라고 고쳐 쓰면 일단 답은 5라고 나옵니다.
&&(AND)에서 원하는 답을 찾으시려면 short-circuit evaluation 개념에 대해서 찾아보시면 됩니다.
short-circuit evalutation에서는 A and B 에서 A가 거짓이면 B의 값에 상관없이 전체는 무조건 거짓이 되어 B의 값을 판단할 이유가 없어
그만큼 컴파일 시간을 절약하게 됩니다.
A or B 에서는 A가 참이라면 B를 판단하지 않아도 전체가 참이 되겠죠.
각 언어나 컴파일러의 특성에 따라 short-circuit evaluation을 사용할 수도 있고 아닐 수도 있습니다.
MoreThanAir
09/06/15 18:33
수정 아이콘
x=1을 대입하더라도 리턴 값이 있죠. 그리고 씨언어에서는 조건문에서 0이 아닌 모든 값은 참으로 판단합니다.
WizardMo진종
09/06/15 18:34
수정 아이콘
써주신데로 돌리면 X=1 이 나올꺼 같은데;; 중간에 대입을 했으니,,,
= 이 아니라 == 이라면 X=5가 맞아요.
MoreThanAir
09/06/15 18:37
수정 아이콘
WizardMo진종님// 위에 써준대로 돌리면 X는 그대로 5가 나옵니다. 이 결과에 따라 씨에서는 short-circuit evaluation을 사용하는 것을 알 수 있군요 A && B 에서 A가 거짓이므로 B는 아예 보지도 않았다는 얘기입니다.
반면 if(x>2 && (x=1))로 코드를 고치면 x는 1로 되었다가 2로 변하게 됩니다.
WizardMo진종
09/06/15 18:52
수정 아이콘
MoreThanAir님// 아..감사합니다 하나더알게되네요^^
화이트푸
09/06/15 20:27
수정 아이콘
MoreThanAir님// if(x>2 && (x=1)) 라면... 1에서 그냥 1로 떨어질꺼 같은데요... ^^
09/06/15 20:43
수정 아이콘
모두들 감사합니다.. 유유 틀렸군요.. 악 ,T T
MoreThanAir
09/06/15 21:00
수정 아이콘
화이트푸님// 1로 떨어졌다가 그 아래 부분에 x=2 때문에 다시 x의 값이 2로 변합니다.
화이트푸
09/06/15 21:15
수정 아이콘
MoreThanAir님// if(x>2 && (x=1)) 이조건을 보면..

1. (x=1) 에서 x에 1값이 대입되고
2. x>2 이기 때문에 false 로 <= 이부분이 본문과 틀리게 쓰셨던데....
3. 그냥 1값이 디스플레이 되는게 아닌지요...
MoreThanAir
09/06/15 21:17
수정 아이콘
화이트푸님// 이미 x>2는 지나쳤기 때문에 x에 1이 대입되더라도 다시 x>2를 비교하지는 않습니다.
그래서 다음 줄로 내려가서 x에 2가 대입되는거지요.
MoreThanAir
09/06/15 21:21
수정 아이콘
참고로 말씀드리면 명령어를 실행하는 경우에 저 코드는 기계어로 변해서 메모리 어드레스에 배치가 되겠지요.
그리고 PC(Program Counter)가 주소를 순차적으로 따라가며 실행을 합니다.
분기명령(jmp) 등이 없는 경우에는 순차적으로 따라가기 때문에 이미 지나온 명령은 또 다시 영향을 못 끼치는 것이지요-
화이트푸
09/06/15 21:52
수정 아이콘
MoreThanAir님// 아하 그렇군요... 잘 알아갑니다. ^^ 감사해요!
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
57636 안녕하세요 수능 수학 질문입니다 [4] 자판2138 09/06/15 2138
57634 스타리그라는 명칭에 대해... [12] 비야레알1848 09/06/15 1848
57633 무선 인터넷을 사용하는데 갑작스럽게 무선을 못잡는 현상 [1] 모모홍차1613 09/06/15 1613
57632 아발론 msl 경기들을 무료로 볼 수 있는 곳이 있나요? [3] 생김생김열매2679 09/06/15 2679
57631 fm2009 및 컴퓨터 속도에 대해서 질문입니다. [6] 이수철2134 09/06/15 2134
57630 휴대폰 구입 질문입니다. (2g) [7] 하늘이야기2142 09/06/15 2142
57629 동원훈련 관련 질문드립니다.. [1] 있는혼2084 09/06/15 2084
57627 비스타에서 네로버닝룸 사용이 불가능 한가요? [3] 율본좌2179 09/06/15 2179
57626 중고 컴퓨터 시세 아시는 분께 질문 드립니다~ [3] 망이1559 09/06/15 1559
57624 OSL, MSL, GOMTV 스타리그 결승전 일정, 장소 부탁 드립니다. [2] 이세용1681 09/06/15 1681
57623 영화 '달콤한 인생' 질문입니다(완전 스포) [16] 천마신군3304 09/06/15 3304
57620 옙손 빔 프로젝트 팔려고 하는데 어디 팔데 있을까요? 라캉~2166 09/06/15 2166
57619 C언어 질문하나드릴게요. [14] Chloe1645 09/06/15 1645
57618 2008년 경제성장률 과 2009년 예상치 경제성장률 데이터에 관한 질문입니다. [2] SK Lee1496 09/06/15 1496
57617 AMD 데네브정도면 스타2할때 충분하겠죠? [9] 오가사카2019 09/06/15 2019
57616 신검 [1] 영혼1693 09/06/15 1693
57615 혹시 저 같은 분 계신가요? [29] MoreThanAir2164 09/06/15 2164
57614 영화 추천! [8] 김재혁2149 09/06/15 2149
57613 포모스 전화번호 알려주세요. [2] wook982880 09/06/15 2880
57612 프로토콜의 개념을 아시는 피지알 회원분들께 도움을 요청합니다. [1] LightClassic1605 09/06/15 1605
57611 컴퓨터 견적좀 봐주세요~ [4] EsPoRTSZZang1681 09/06/15 1681
57610 C#에서 텍스트문서에 있는 숫자와 단어를 불러올려고 합니다. 도와주세요. [1] Haru1900 09/06/15 1900
57609 ㄷ리조트 이벤트당첨?? [6] SkyHigh2382 09/06/15 2382
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로