मेरे पास एक सरल कार्यक्रम है:
#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)?