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