int b = 8;
printf("%d ", 2*b + b--);
씨언어 초보자입니다.
여기서 출력이 24라고 나오는데 왜 24로 나오는지 잘모르겠습니다.
일단 b--가 먼저 연산되고(b는 일단 8로 처리되고 다음 b에서 7으로 연산) 2*b(2*7)가 연산되고 +가(8+14=22) 연산되는 것이 아닌가요?
고수분들 도와주세요...
씨언어 초보자입니다.
여기서 출력이 24라고 나오는데 왜 24로 나오는지 잘모르겠습니다.
일단 b--가 먼저 연산되고(b는 일단 8로 처리되고 다음 b에서 7으로 연산) 2*b(2*7)가 연산되고 +가(8+14=22) 연산되는 것이 아닌가요?
고수분들 도와주세요...
전위증가 후위증가 검색해봐여
번외로 저거 무저건 왼쪽부터 읽는게아니라 저렇게 하면 안대는걸류암
후위연산자 ; 뒤에 작동한다고 생각해 그러니까 저거는 2*8+8연산을 끝낸후 b가 7로 줄어든거야
16+8=24 연산하고 b=7 되는거
근데 printf("%d ", b + b++); 여기서는 출력이 17로 계산됩니다. 9 + 8 = 17 이렇게요.
아마그거 디버깅해보면 b++ 하고 b 더한걸로 대있을거임 한줄에 저렇게쓰면안대
더하기인데 어떻게 17이 됨?
9 + 8이요
아니 그러니까 b+ b++이고 8이면 8 + 8이거나 8+ 9가 되어야 하는거아니야? 왜 9 +8 로 역으로 두번째꺼가 감소인데
b++에서 b를 8로 평가하고 그 앞의 b가 9로 평가되는건가 - dc Cpp
네 맞아요. b++에서 b를 8로 평가하고 그 앞의 b가 9로 평가하는거라고 하네요. 이 점이 문제인데....본문에 제가 궁금한 것이 왜 여기서는 b--에서는 8로 연산하고 그 뒤 2*b에서도 b를 8로 연산하느냐 이거에요
컴파일러가 최적화하면서 지좃대로읽어서 왼쪽부터 읽을지 오른쪽부터 읽을지 랜덤일거라니까
그러네요. 컴파일러에 따라 다르네요
UB아님?