J'ai ci-dessous un programme 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 condition if(bal < INT32_MIN )
est toujours vraie. Comment est-ce possible?
Cela fonctionne bien si je change la macro en:
#define INT32_MIN (-2147483648L)
Quelqu'un peut-il signaler le problème?
-0x80000000
, mais faux pour -0x80000000L
, -2147483648
et -2147483648L
(gcc 4.1.2), la question est donc: pourquoi est l'int littéral -0x80000000
différent du littéral int -2147483648
?
<limits.h>
définissent INT_MIN
comme (-2147483647 - 1)
, vous savez maintenant pourquoi.
CHAR_BIT * sizeof(int)
?