У мене нижче проста програма:
#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;
}
Умова if(bal < INT32_MIN )
завжди вірна. Як це можливо?
Це добре працює, якщо я зміню макрос на:
#define INT32_MIN (-2147483648L)
Хтось може вказати на це питання?
-0x80000000
, але невірно для -0x80000000L
, -2147483648
і -2147483648L
(GCC 4.1.2), тому виникає питання: чому це ІНТ буквальні -0x80000000
відрізняється від Int литерала -2147483648
?
<limits.h>
визначає INT_MIN
як (-2147483647 - 1)
, тепер ви знаєте, чому.
CHAR_BIT * sizeof(int)
?