Ich habe unten ein einfaches Programm:
#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;
}
Die Bedingung if(bal < INT32_MIN )ist immer wahr. Wie ist es möglich?
Es funktioniert gut, wenn ich das Makro in ändere:
#define INT32_MIN (-2147483648L)
Kann jemand auf das Problem hinweisen?
-0x80000000, aber falsch für -0x80000000L, -2147483648und -2147483648L(gcc 4.1.2), so ist die Frage: warum ist der int wörtlichen -0x80000000unterscheidet sich von der int wörtliche -2147483648?
<limits.h>definiert INT_MINals (-2147483647 - 1), wissen Sie jetzt warum.
CHAR_BIT * sizeof(int)?