मेरे पास एक सरल कार्यक्रम है:
#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
अंतर शाब्दिक से अलग क्यों है -2147483648
?
<limits.h>
परिभाषित INT_MIN
करता है (-2147483647 - 1)
, तो अब आप जानते हैं कि क्यों।
CHAR_BIT * sizeof(int)
?