아래에 간단한 프로그램이 있습니다.
#include <stdio.h>
#define INT32_MIN (-0x80000000)
int main(void)
{
long long bal = 0;
if(bal < INT32_MIN )
{
printf("Failed!!!");
}
else
{
printf("Success!!!");
}
return 0;
}
조건 if(bal < INT32_MIN )
은 항상 참입니다. 그게 어떻게 가능해?
매크로를 다음과 같이 변경하면 정상적으로 작동합니다.
#define INT32_MIN (-2147483648L)
누구든지 문제를 지적 할 수 있습니까?
-0x80000000
,하지만에 대한 거짓 -0x80000000L
, -2147483648
그리고 -2147483648L
왜 INT 리터럴 : (GCC 4.1.2), 문제는 그래서 -0x80000000
INT의 문자와 다른가 -2147483648
?
<limits.h>
이로 정의 INT_MIN
되어 있음을 알게 된 경우 (-2147483647 - 1)
, 이제 그 이유를 알 수 있습니다.
CHAR_BIT * sizeof(int)
입니까?