यदि sizeof(int) == sizeof(long)
, तो क्या INT_MIN == LONG_MIN && INT_MAX == LONG_MAX
हमेशा सत्य है?
क्या कोई वास्तविक मौजूदा मामले "सच नहीं" प्रदर्शित कर रहे हैं?
1 उत्तर
यह सच नहीं होना चाहिए। C11 6.2.6.2p2:
हस्ताक्षरित पूर्णांक प्रकारों के लिए, ऑब्जेक्ट प्रतिनिधित्व के बिट्स को तीन समूहों में विभाजित किया जाएगा: मान बिट्स, पैडिंग बिट्स, और साइन बिट। कोई पैडिंग बिट नहीं होना चाहिए; हस्ताक्षरित चार में कोई पैडिंग बिट नहीं होगा। ठीक एक साइन बिट होगा। प्रत्येक बिट जो कि एक मान बिट है, उसका संबंधित अहस्ताक्षरित प्रकार के ऑब्जेक्ट प्रतिनिधित्व में समान बिट के समान मान होगा (यदि हस्ताक्षरित प्रकार में M मान बिट्स हैं और अहस्ताक्षरित प्रकार में N हैं, तो M <= N )। यदि साइन बिट शून्य है, तो यह परिणामी मान को प्रभावित नहीं करेगा। यदि साइन बिट एक है, तो मान को निम्न में से किसी एक तरीके से संशोधित किया जाएगा:
<उल>- साइन बिट 0 के साथ संबंधित मान नकारात्मक है (चिह्न और परिमाण);
- साइन बिट का मान है -(2M) (दो का पूरक);
- साइन बिट का मान -(2M- 1) (एक का पूरक) होता है।
इनमें से कौन सा लागू होता है कार्यान्वयन-परिभाषित है, जैसे कि साइन बिट 1 और सभी मान बिट्स शून्य (पहले दो के लिए), या साइन बिट और सभी मान बिट्स 1 (एक के पूरक के लिए) के साथ, है एक जाल प्रतिनिधित्व या एक सामान्य मूल्य। संकेत और परिमाण और इकाई के पूरक के मामले में, यदि यह प्रतिनिधित्व एक सामान्य मान है तो इसे ऋणात्मक शून्य कहा जाता है।
अब, सवाल यह है कि "क्या कोई कार्यान्वयन है जिसमें अलग-अलग मात्रा में पैडिंग बिट्स हैं" या यहां तक कि निरा तौर पर उल्लिखित, विभिन्न प्रकार के पूर्णांकों के लिए अलग-अलग अभ्यावेदन - यह साबित करना बहुत कठिन है कि वर्तमान में ऐसा कोई कार्यान्वयन नहीं है। लेकिन मेरा मानना है कि वास्तविक जीवन में इस तरह की व्यवस्था के सामने आने की संभावना बहुत कम है।
short
एक 32-बिट प्रकार था जिसमें 64 बिट स्थान था। उस स्थिति में, इसमेंsizeof(short) == sizeof(int)
लेकिनSHORT_MAX < INT_MAX
हो सकते थे।