Eu tenho abaixo um programa simples:
#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;
}
A condição if(bal < INT32_MIN )
é sempre verdadeira. Como isso é possível?
Funciona bem se eu alterar a macro para:
#define INT32_MIN (-2147483648L)
Alguém pode apontar o problema?
-0x80000000
, mas falsa para -0x80000000L
, -2147483648
e -2147483648L
(gcc 4.1.2), então a questão é: porque é que o int literal -0x80000000
diferente do literal int -2147483648
?
<limits.h>
define INT_MIN
como (-2147483647 - 1)
, agora você sabe o porquê.
CHAR_BIT * sizeof(int)
?