이 질문을 어딘가에서 발견했으며 이해할 수 없습니다. 이걸 도와주세요.C에서 비정상적인 수학 연산
#include<stdio.h>
int main(){
char x = 250;
int ans = x + !x + ~x + ++x;
printf("%d", ans);
}
출력이 -6이됩니다. 나는 컴파일러가 어떻게 동작하는지 이해하지 못한다.
미리 감사드립니다.
이 질문을 어딘가에서 발견했으며 이해할 수 없습니다. 이걸 도와주세요.C에서 비정상적인 수학 연산
#include<stdio.h>
int main(){
char x = 250;
int ans = x + !x + ~x + ++x;
printf("%d", ans);
}
출력이 -6이됩니다. 나는 컴파일러가 어떻게 동작하는지 이해하지 못한다.
미리 감사드립니다.
이와 같은 것을 이해하려고 할 때 문제를 더 작은 부분으로 나누고 각각을 살펴 보는 것이 도움이됩니다.
#include<stdio.h>
int main(){
char x = 250;
printf("x: %d\n", x);
printf("!x: %d\n", !x);
printf("~x: %d\n", ~x);
printf("++x: %d\n", ++x);
int ans = x + !x + ~x + ++x;
printf("ans: %d\n", ans);
}
내가 얻을 출력 내가 그것을 실행할 수 있습니다 : :
x: -6
!x: 0
~x: 5
++x: -5
ans: -5
당신이 무엇을 각 부분이 의미하는 것은, 그것을보고 쉽게 이해하면이 각각의 값을 출력하도록 나는 당신의 프로그램을 수정 최종 결과에 결합하는 방법. 그러나 ++x
은 다른 곳에서 x
을 사용하는 동일한 식의 x
을 수정하고 조건이 평가되는 순서를 변경하면 최종 결과가 변경되므로 내 컴파일러도 경고 메시지를 표시합니다.
이 조언이 도움이 되더라도 답변을 통해 작업 조합이 정의 된 동작을 설명한다는 인상을줍니다. 그것은 (적어도 불규칙하게 결합 된 경우에는) 그렇지 않습니다. – byxor
'char'가 서명 된 경우 '250'이 범위를 벗어 났지만 '-6'이 될 수 있습니다. 그러나 시퀀스 포인트가없는'++ x'는 그것을 정의되지 않은 행동으로 만듭니다. –