Tengo debajo un programa simple:
#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;
}
La condición if(bal < INT32_MIN )es siempre cierta. ¿Como es posible?
Funciona bien si cambio la macro a:
#define INT32_MIN (-2147483648L)
¿Alguien puede señalar el problema?
-0x80000000, pero falsa para -0x80000000L, -2147483648y -2147483648L(gcc 4.1.2), así que la pregunta es: ¿por qué es el int literal -0x80000000diferente de lo literal int -2147483648?
<limits.h>define INT_MINcomo (-2147483647 - 1), ahora sabes por qué.
CHAR_BIT * sizeof(int)?