यदि sizeof(int) == sizeof(long), तो क्या INT_MIN == LONG_MIN && INT_MAX == LONG_MAX हमेशा सत्य है?

क्या कोई वास्तविक मौजूदा मामले "सच नहीं" प्रदर्शित कर रहे हैं?

8
pmor 19 अक्टूबर 2021, 16:12
1
कोई एक कंप्यूटर और एक पागल संकलक लेखक की कल्पना कर सकता है जो लंबे समय के लिए ints और साइन-परिमाण के लिए 2 के पूरक का उपयोग करता है। लेकिन कोई वास्तविक दुनिया के उदाहरण नहीं।
 – 
stark
19 अक्टूबर 2021, 16:14
1
बस जिज्ञासु, आप क्यों जानना चाहते हैं कि क्या आप उस पर भरोसा कर सकते हैं?
 – 
Stefan Riedel
19 अक्टूबर 2021, 16:31
1
जाहिर है, सी मानक के अगले संस्करण में हस्ताक्षरित पूर्णांक के एक-पूरक और साइन-एंड-परिमाण प्रतिनिधित्व को छोड़ दिया जा रहा है।
 – 
Ian Abbott
19 अक्टूबर 2021, 16:32
6
द न्यू सी स्टैंडर्ड पेज 594 पर लिखा है क्रे कार्यान्वयन थे जहां short एक 32-बिट प्रकार था जिसमें 64 बिट स्थान था। उस स्थिति में, इसमें sizeof(short) == sizeof(int) लेकिन SHORT_MAX < INT_MAX हो सकते थे।
 – 
Nate Eldredge
19 अक्टूबर 2021, 16:45
मुझे लगता है कि यह किसी भी होस्टेड कार्यान्वयन पर एक सुरक्षित धारणा है, लेकिन यह गारंटी नहीं है। सी प्रकार के आकार और प्रतिनिधित्व के साथ अजीब चीजें करने के लिए कार्यान्वयन की अनुमति देता है, और हमेशा कुछ अजीब, विशिष्ट वास्तुकला होती है जिसे चीजों को अलग तरह से करना पड़ता है।
 – 
John Bode
19 अक्टूबर 2021, 16:45

1 उत्तर

सबसे बढ़िया उत्तर

यह सच नहीं होना चाहिए। C11 6.2.6.2p2:

  1. हस्ताक्षरित पूर्णांक प्रकारों के लिए, ऑब्जेक्ट प्रतिनिधित्व के बिट्स को तीन समूहों में विभाजित किया जाएगा: मान बिट्स, पैडिंग बिट्स, और साइन बिट। कोई पैडिंग बिट नहीं होना चाहिए; हस्ताक्षरित चार में कोई पैडिंग बिट नहीं होगा। ठीक एक साइन बिट होगा। प्रत्येक बिट जो कि एक मान बिट है, उसका संबंधित अहस्ताक्षरित प्रकार के ऑब्जेक्ट प्रतिनिधित्व में समान बिट के समान मान होगा (यदि हस्ताक्षरित प्रकार में M मान बिट्स हैं और अहस्ताक्षरित प्रकार में N हैं, तो M <= N )। यदि साइन बिट शून्य है, तो यह परिणामी मान को प्रभावित नहीं करेगा। यदि साइन बिट एक है, तो मान को निम्न में से किसी एक तरीके से संशोधित किया जाएगा:

    <उल>
  2. साइन बिट 0 के साथ संबंधित मान नकारात्मक है (चिह्न और परिमाण);
  3. साइन बिट का मान है -(2M) (दो का पूरक);
  4. साइन बिट का मान -(2M- 1) (एक का पूरक) होता है।
  5. इनमें से कौन सा लागू होता है कार्यान्वयन-परिभाषित है, जैसे कि साइन बिट 1 और सभी मान बिट्स शून्य (पहले दो के लिए), या साइन बिट और सभी मान बिट्स 1 (एक के पूरक के लिए) के साथ, है एक जाल प्रतिनिधित्व या एक सामान्य मूल्य। संकेत और परिमाण और इकाई के पूरक के मामले में, यदि यह प्रतिनिधित्व एक सामान्य मान है तो इसे ऋणात्मक शून्य कहा जाता है।


अब, सवाल यह है कि "क्या कोई कार्यान्वयन है जिसमें अलग-अलग मात्रा में पैडिंग बिट्स हैं" या यहां तक ​​​​कि निरा तौर पर उल्लिखित, विभिन्न प्रकार के पूर्णांकों के लिए अलग-अलग अभ्यावेदन - यह साबित करना बहुत कठिन है कि वर्तमान में ऐसा कोई कार्यान्वयन नहीं है। लेकिन मेरा मानना ​​है कि वास्तविक जीवन में इस तरह की व्यवस्था के सामने आने की संभावना बहुत कम है।

6
Antti Haapala 20 अक्टूबर 2021, 18:04