나는 보았다 -0x80000000 + -0x80000000 = 0이 나에게 이해가되지 않았다 그래서 나는 간단한 C 프로그램은 아래의 테스트하고 참으로 답이 0 썼다 :왜 -0x80000000 + -0x80000000 == 0입니까? programmign 트릭에 대한 책을 읽는 동안
#include <stdio.h>
int main()
{
int x = -0x80000000;
int y = -0x80000000;
int z = x + y;
printf("Z is: %d", z);
return 0;
}
아무도 그 이유를 밝힐 수 있습니까? 오버플로에 대해 뭔가를 봤지만 오버플로가 예외 또는 다른 오류가 아닌 0을 초래하는 방식을 볼 수 없습니다. 나는 어떤 경고 나 아무것도 얻지 않는다.
예, 오버플로가 발생합니다. 아니요, C는 일반적으로 정수 오버플로에 대해 경고하거나 예외를 throw하지 않습니다. 실제 응답의 하위 32 비트가 모두 0이기 때문에 0이 표시되고, 정수 오버플로가 발생하면 4294967296 모듈로, 즉 모듈로 2^32를 얻는 경향이 있습니다. –