printf()함수에 관하여 사소한 궁금한 점이 생겨 질문 올립니다!
printf("%d", z=x+y)의 식이 존재할 때, 결국에 z의 값을 출력하게 되는데, z=x+y식에서 우선순위가 가장 낮기 때문에, z가 마지막에 남아 출력되는 것일까요?
printf("%d", z=x+y)의 식이 존재할 때, 결국에 z의 값을 출력하게 되는데
네.
z=x+y식에서 우선순위가 가장 낮기 때문에
맞습니다.
z가 마지막에 남아 출력되는 것일까요?
조금 미묘하군요. 아 다르고 어 다르다는 말이 있지요.
대입 연산자는 항상 좌측 피연산자에 쓰인 값으로 평가됩니다. 즉 z가 남는 게 아니라, z에 쓰였던 값이 남는 겁니다.
"항상 좌측 피연산자에 쓰인 값으로 평가됩니다."
그렇다면, z=x+y && x 등의 식에서 좌측은 z의 값으로 평가되기에 z가 1이라면(좌측이) 참으로 판단하고, 0이라면 거짓으로 판단하는 것인가요??
최종적으로 z에 쓰이는 값이 전체 표현식, 즉 대입 연산의 결과가 되는 거지요.
!!
저렇게 코드를 안 짜면 됩니다.
z=x+y printf("%d", z)
printf("%d", x+y)
둘 중에 하나 선택하시고 저런 코드는 짜지 마세요.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
Quote:printf("%d", z=x+y)의 식이
네.
맞습니다.
조금 미묘하군요. 아 다르고 어 다르다는 말이 있지요.
대입 연산자는 항상 좌측 피연산자에 쓰인 값으로 평가됩니다.
즉 z가 남는 게 아니라, z에 쓰였던 값이 남는 겁니다.
감사합니다!
"항상 좌측 피연산자에 쓰인 값으로 평가됩니다."
그렇다면, z=x+y && x 등의 식에서 좌측은 z의 값으로 평가되기에 z가 1이라면(좌측이) 참으로 판단하고,
0이라면 거짓으로 판단하는 것인가요??
최종적으로 z에 쓰이는 값이 전체 표현식, 즉 대입
최종적으로 z에 쓰이는 값이 전체 표현식, 즉 대입 연산의 결과가 되는 거지요.
감사합니다!
!!
저런 고민을 안 하는 법을 알려드릴까요?
저렇게 코드를 안 짜면 됩니다.
z=x+y
printf("%d", z)
printf("%d", x+y)
둘 중에 하나 선택하시고 저런 코드는 짜지 마세요.
댓글 달기