2016-07-19 8 views
6

क्या यह मानना ​​सुरक्षित है कि -LLONG_MAX (LLONG_MAX अस्वीकृत) long long रेंज से संबंधित है?हस्ताक्षरित पूर्णांक प्रकारों के न्यूनतम और अधिकतम मानों के बीच संबंधों पर सी ++ मानक गारंटी क्या हैं?

क्या यह मानना ​​सुरक्षित है कि LLONG_MIN < -LLONG_MAX तो LLONG_MIN == -LLONG_MAX - 1?

क्या यह मानक या केवल सभी वास्तविक उपकरणों द्वारा गारंटीकृत है LLONG_MIN == -LLONG_MAX - 1 या LLONG_MIN == -LLONG_MAX प्रदान करता है?

+0

अपने शोध को साझा करें। –

+1

@ code0 क्या शोध? ओपी जानना चाहता है कि उसका अनुमान मानक अनुपालन है या नहीं। – NathanOliver

+0

@ code0 हस्ताक्षर किए गए पूर्णांक प्रकारों के MIN और MAX के बीच संबंध नहीं मिला और न ही C++ 11 मानक ड्राफ्ट में और न ही C11 मानक ड्राफ्ट में। शायद मुझे कुछ याद आया। –

उत्तर

3

यह मान लेना कि -LLONG_MAX (LLONG_MAX नकार) long long रेंज के अंतर्गत आता है सुरक्षित है?

क्या यह मानना ​​सुरक्षित है कि LLONG_MIN < -LLONG_MAX तो LLONG_MIN == -LLONG_MAX - 1?

क्या यह मानक या केवल सभी वास्तविक उपकरणों द्वारा गारंटीकृत है LLONG_MIN == -LLONG_MAX - 1 या LLONG_MIN == -LLONG_MAX प्रदान करता है?


उन तीन कथन मामले कार्यान्वयन 2 के पूरक में से एक, 1 के पूरक, या पर हस्ताक्षर और परिमाण का उपयोग करता है पर हस्ताक्षर किए पूर्णांक प्रकार का प्रतिनिधित्व करने में सही हैं। -LLONG_MAX सभी तीन योजनाओं में long long की सीमा में है, और LLONG_MIN-LLONG_MAX (1 का पूरक, चिह्न और परिमाण, और संभवतः 2 का पूरक) है या -LLONG_MAX-1 (संभवतः 2 का पूरक) है। 2 की पूरक मशीनें उस अतिरिक्त मूल्य को जाल प्रतिनिधित्व के रूप में उपयोग कर सकती हैं, जैसे कि 1 के पूरक और साइन और परिमाण मशीनें नकारात्मक शून्य का उपयोग जाल प्रतिनिधित्व के रूप में कर सकती हैं। तो आपके प्रश्नों का उत्तर "हां" है यदि मानक अनिवार्य है कि कार्यान्वयन उन योजनाओं में से एक का उपयोग करता है।

सी मानक (जो करने के लिए सी ++ कई स्थानों में मानक defers) जनादेश या तो 2 के पूरक, 1 के पूरक, या पर हस्ताक्षर और परिमाण:

C11 6.2.6.2 पूर्णांक प्रकार:

यदि साइन बिट एक है, तो मान निम्न तरीकों में से एक में संशोधित किया जाएगा:

- साइन बिट 0 के साथ संबंधित मान अस्वीकार (साइन और परिमाण) है;
- साइन बिट में मूल्य है - (2 एम) (दो पूरक);
- साइन बिट में मूल्य है - (2 एम -1) (वाले 'पूरक)।

सी ++ मानक में थोड़ा और अधिक खुला हो गया लगता है:

सी ++ 14 3.9।1 मौलिक प्रकार:

अभिन्न प्रकार के प्रतिनिधित्व शुद्ध बाइनरी संख्या प्रणाली के उपयोग से मूल्यों को परिभाषित करेंगे। [उदाहरण: यह अंतर्राष्ट्रीय मानक अभिन्न प्रकारों के लिए 2 के पूरक, 1 के पूरक और हस्ताक्षरित परिमाण प्रस्तुतिकरणों परमिट करता है। - अंत उदाहरण]

फ़ुटनोट 51 है, जो परिभाषित करता है क्या "एक शुद्ध द्विआधारी संख्यान सिस्टम" का अर्थ है, दशमलव प्रणाली से इनकार करने के लिए प्रकट होता है, और यह भी सिस्टम (जहां 0 नहीं है सभी बिट्स शून्य) ऑफसेट:

51) बाइनरी अंकों 0 और 1 का उपयोग करने वाले पूर्णांक के लिए एक स्थितित्मक प्रतिनिधित्व, जिसमें लगातार बिट्स द्वारा दर्शाए गए मान additive हैं, 1 से शुरू होते हैं, और 2 की लगातार अभिन्न शक्ति से गुणा किए जाते हैं, सिवाय इसके कि शायद उच्चतम स्थिति के साथ थोड़ा सा।

व्यावहारिक रूप से बोलने वाले सभी, 2 के पूरक, 1 के पूरक, और संकेत और परिमाण हैं: सी मानक द्वारा अनिवार्य समान योजनाएं। मुझे संदेह है कि एक विक्रेता एक मशीन को छूएगा जो पूर्णांक का प्रतिनिधित्व करने के लिए एक नई 21 वीं शताब्दी योजना का उपयोग करता है और किसी भी तरह से सी ++ मानक के कानून के पत्र को पूरा करता है (लेकिन इसलिए सी के साथ असंगत है)।

+0

क्या मुझे सही समझा है? व्यावहारिक रूप से बोलना, यह सच है, लेकिन सैद्धांतिक रूप से यदि शीर्ष बिट 1 के साथ दो मान विशेष मूल्यों के लिए आरक्षित हैं जैसे कि "प्रारंभ नहीं किया गया" और "त्रुटि" तो ऋणात्मक संख्याओं की सीमा सकारात्मक संख्याओं की सीमा से कम हो सकती है। –

+0

@FyodorMenshikov - आप इसे गलत पढ़ते हैं (या मैंने इसे गलत लिखा है)। उन तीनों योजनाओं में से प्रत्येक के साथ, एक मूल्य है जो काफी फिट नहीं होता है। 1 के पूरक और साइन-आयाम के साथ, यह नकारात्मक शून्य है। (आईईईई फ्लोटिंग पॉइंट प्रस्तुति में ऋणात्मक शून्य भी है, लेकिन उस मानक के पास नकारात्मक शून्य से निपटने के तरीके के बारे में विशिष्ट नियम हैं।) 2 के पूरक के साथ, वह अतिरिक्त मूल्य '-LLONG_MAX-1' है। एक जाल प्रतिनिधित्व के रूप में इसका मतलब यह होगा कि 'LLONG_MIN'' -LLONG_MAX' है, जैसा कि अन्य दो योजनाओं में समान है। –

+0

क्या _theoretically_ 4 वीं योजना हो सकती है जो इनमें से एक से केवल एक अतिरिक्त नकारात्मक मूल्य में आरक्षित है? शायद हार्डवेयर के स्तर पर नहीं बल्कि संकलक के स्तर पर आरक्षित है। –

0

नहीं। मानक दो पूरक पूरक पूर्णांक प्रतिनिधित्व नहीं करता है।

ने कहा कि सी और सी ++ कार्यान्वयन के विशाल बहुमत 2 की कंप मशीनों पर हैं।

+1

प्रश्न 2 के पूरक, 1 के पूरक, और हस्ताक्षरित परिमाण को संबोधित करता है। –

+0

ओपी विशेष रूप से एक ही प्रश्न पूछता है तीन बार: क्या यह 2 का कॉम्प रिलेशनशिप सुरक्षित और गारंटीकृत है? जवाब न है_। –

+0

अंतिम आइटम को फिर से पढ़ें: 'LLONG_MIN == -LLONG_MAX' 2 की पूरक मशीनों पर सत्य नहीं है। –

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