2016-11-18 15 views
5

मैं सी प्राइमर साथ ही, 6 संस्करण, समीक्षा अध्याय में प्रश्न से देखा 3.0XAA एक हस्ताक्षरित int क्यों है और int नहीं है?

प्रश्न:

Question Picture

उत्तर परिशिष्ट में एक:

Answer Picture

नोटिस d.0XAA, मेरा उत्तर int स्थिर, हेक्साडेसिमल प्रारूप है, लेकिन इस सवाल का जवाब unsigned int

है और मुझे आश्चर्य है कि क्यों

+0

इस प्रकार भाषा परिभाषित करती है। किसी ने किसी बिंदु पर फैसला किया कि यह कैसे होना चाहिए। आप वास्तव में यह नहीं पता कर सकते कि क्यों आपके पास टाइम मशीन नहीं है और कुछ दशकों पहले जो भी निर्णय लेता है उससे पूछ सकते हैं। – Art

+0

@Art क्या आप सी मानक या कुछ और से अधिक जानकारी देने के लिए कृपया कर सकते हैं? मैं इसकी सराहना करता हूं :) –

+0

यहां आपको संदर्भ की आवश्यकता है http://stackoverflow.com/questions/12499592/c-hex-constant-type – HighPredator

उत्तर

5

उस किताब सही नहीं है। प्रति C11 6.4.4.1 के रूप में, हेक्साडेसिमल का पूर्णांक स्थिरांक के प्रकार इस तालिका से निर्धारित कर रहे हैं:

Suffix ... Octal or Hexadecimal Constant 

None  ... int 
       unsigned int 
       long int 
       unsigned long int 
       long long int 
       unsigned long long int 

u or U ... unsigned int 
       unsigned long int 
       unsigned long long int 

आपका निरंतर 0xAA कोई प्रत्यय है तो उपरोक्त तालिका के शीर्ष भाग क्या लागू होता है। मतलब: संकलक पहले जांच करेगा कि क्या मान int में फिट हो सकता है। यदि यह फिट नहीं है, तो यह जांच करेगा कि यह unsigned int में फिट होगा या नहीं।

सी के किसी ज्ञात कार्यान्वयन पर, मूल्य 0xAA निश्चित रूप से int के अंदर फिट होगा। प्रश्न का सही उत्तर int है।

हालांकि, लगातार 0xAAu रहा था, उद्धृत तालिका का निचला हिस्सा लागू होता और परिणाम unsigned int होता।

+3

किसी उत्तर में जोड़ने के लिए, चूंकि मानक के लिए आवश्यक है कि 'INT_MAX' कम से कम' 32767' है, तो 'xx0' से' 0x7fff' तक प्रत्यय के बिना सभी हेक्साडेसिमल स्थिरांक हमेशा 'int' होते हैं। – user694733

+0

यह ज्ञात इरेटा के बीच सूचीबद्ध नहीं था, इसलिए मैंने प्रकाशक को इरेटा सबमिट कर दिया है। – Lundin

+0

ईमानदारी से आपके उत्तर के लिए धन्यवाद^_ ^ –

संबंधित मुद्दे