以下に簡単なプログラムを示します。
#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
なぜintがリテラルである:質問があるので、(GCC 4.1.2) -0x80000000
int型のリテラルは異なりますか -2147483648
?
<limits.h>
定義さINT_MIN
れていることに気付いたことがあれば、その(-2147483647 - 1)
理由を理解してください。
CHAR_BIT * sizeof(int)
ですか?