:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
09/06/15 18:29
답은 5 가 맞습니다.
위에서 5로 선언한 후 밑의 if문을 적용받지 않았기 때문에 5가 그대로 출력되는 것이죠. 그리고 비교문은 '=' 이 아니라 '==' 입니다. 이거 은근히 많이 틀리는 것이죠.
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을 사용할 수도 있고 아닐 수도 있습니다.
09/06/15 18:37
WizardMo진종님// 위에 써준대로 돌리면 X는 그대로 5가 나옵니다. 이 결과에 따라 씨에서는 short-circuit evaluation을 사용하는 것을 알 수 있군요 A && B 에서 A가 거짓이므로 B는 아예 보지도 않았다는 얘기입니다.
반면 if(x>2 && (x=1))로 코드를 고치면 x는 1로 되었다가 2로 변하게 됩니다.
09/06/15 21:15
MoreThanAir님// if(x>2 && (x=1)) 이조건을 보면..
1. (x=1) 에서 x에 1값이 대입되고 2. x>2 이기 때문에 false 로 <= 이부분이 본문과 틀리게 쓰셨던데.... 3. 그냥 1값이 디스플레이 되는게 아닌지요...
09/06/15 21:17
화이트푸님// 이미 x>2는 지나쳤기 때문에 x에 1이 대입되더라도 다시 x>2를 비교하지는 않습니다.
그래서 다음 줄로 내려가서 x에 2가 대입되는거지요.
09/06/15 21:21
참고로 말씀드리면 명령어를 실행하는 경우에 저 코드는 기계어로 변해서 메모리 어드레스에 배치가 되겠지요.
그리고 PC(Program Counter)가 주소를 순차적으로 따라가며 실행을 합니다. 분기명령(jmp) 등이 없는 경우에는 순차적으로 따라가기 때문에 이미 지나온 명령은 또 다시 영향을 못 끼치는 것이지요-
|