Mam poniżej prosty program:
#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;
}
Warunek if(bal < INT32_MIN )jest zawsze spełniony. Jak to jest możliwe?
Działa dobrze, jeśli zmienię makro na:
#define INT32_MIN (-2147483648L)
Czy ktoś może wskazać problem?
-0x80000000, ale za fałszywe -0x80000000L, -2147483648a -2147483648L(gcc 4.1.2), więc pytanie brzmi: dlaczego jest int dosłowne -0x80000000różni się od int dosłownym -2147483648?
<limits.h>definiuje INT_MINjako (-2147483647 - 1), teraz wiesz, dlaczego.
CHAR_BIT * sizeof(int)?