C 언어에서 ++(--) 연산자 질문입니다.(꼭 좀 답변 부탁드리겠습니다...)
꽃님이
질문 제목 : C 언어에서 ++(--) 연산자 질문입니다.
질문 내용 :
우선 코드부터 먼저 보여드리겠습니다.
====================================================================
#include stdio.h
void main(void)
{
int a=7, b=24, c; // 초기화
c = a==7 || b++ == 24; // 참 || 참의 경우
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 24가 나옴
a=7, b=24; // 초기화
c = b++ == 24 || a==7; // || 연산자를 기준으로 위치를 바꿔줌
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 25가 나옴
a=7, b=24; // 초기화
c = a==7 || b++ 24; // 참 || 거짓의 경우
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 24가 나옴
a=7, b=24; // 초기화
c = b++ 24 || a==7; // || 연산자를 기준으로 위치를 바꿔줌
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 25가 나옴
a=7, b=24; // 초기화
c = a!=7 || b++ == 24; // 거짓 || 참의 경우
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 25가 나옴
a=7, b=24; // 초기화
c = b++ == 24 || a!=7; // || 연산자를 기준으로 위치를 바꿔줌
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 25가 나옴
a=7, b=24; // 초기화
c = a!=7 || b++ != 24; // 거짓 || 거짓의 경우
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 25가 나옴
a=7, b=24;
c = b++ != 24 || a!=7; // || 연산자를 기준으로 위치를 바꿔줌
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 25가 나옴
}
====================================================================
위의 코드를 설명하자면 변수를 선언하고 초기화 시킨 후에,
변수 b에 ++ 연산자를 붙이고, 논리 연산자(||)를 이용하여 참 || 참, 참 || 거짓, 거짓 || 참, 거짓 ||
거짓의 경우를 두고 b값의 변화를 알아보는 코드입니다.
저는변수에++를 붙이고 해당 변수를 다음줄에서 출력하면 무조건적으로 값이 1이 오른다고 알고 있었
는데 막상 저 코드를 실행해보니 그렇지 않음을 알게되었습니다.
게다가 위의 코등 중에서
c = a==7 || b++ == 24; // 참 || 참의 경우
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 24가 나옴
a=7, b=24; // 초기화
c = b++ == 24 || a==7; // || 연산자를 기준으로 위치를 바꿔줌
printf(C의 값은 %d \n, c);
printf(b의 값은 %d \n, b); // b의 값이 25가 나옴
의 경우 똑같이 참 || 참의 경우인데, 위치만 바꿔줌으로써 b의 값이 다르게 나옴을 알 수 있었습니다.
변수에 ++를 붙여도 왜 다 1이 증가하지 않고 경우에 따라서 이러한 차이점이 생기는 지가 궁금하고,
어떨 때는 증가하고, 어떨 때는 증가하지 않는지를 알고싶습니다.(저 코드를 분석해봤지만 어떨 때 증가
하고, 어떨 때 증가하지 않는지를 발견하지 못했습니다.)
또 || 말고도 &&의 경우에도 똑같이 이러한 경우가 발생하던데(b의 값 변화는 다르더군요)&& 연산자를 이
용할 경우에는 어떨 경우에 ++(--) 연산자가 작동하는지 알고 싶습니다.
-
우수리
아~ 정말 감사합니다 ㅎㅎ 몇 일간 혼자 끙끙 고민하다가;; 이렇게 글 적었는데...
정말 감사합니다(__) -
맞손질
a || b 에서 a가 참이면 b는 검사하지 않습니다
a && b 에서 a가 거짓이면 b는 검사하지 않습니다
이걸보고 뭐라고 하는지 까먹었네요 ㅋ;