Aşağıda basit bir program var:
#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;
}
Durum if(bal < INT32_MIN )
her zaman doğrudur. Bu nasıl mümkün olaiblir?
Makroyu şu şekilde değiştirirsem iyi çalışır:
#define INT32_MIN (-2147483648L)
Sorunu bilen var mı?
-0x80000000
ancak sahte -0x80000000L
, -2147483648
ve -2147483648L
neden int literal bağlıdır: (gcc 4.1.2), soru yüzden -0x80000000
int sabitin farklı -2147483648
?
<limits.h>
tanımlar INT_MIN
olarak (-2147483647 - 1)
, şimdi neden biliyor.
CHAR_BIT * sizeof(int)
?