2012-07-15 70 views
7

जब एक पूर्णांक संख्या प्रकार की सीमा से बाहर होती है, तो अधिकतम मान + 1 जोड़ा/घटाया जाता है (उस सीमा पर निर्भर करता है जिस पर संख्या थी)। उदाहरण के लिए,सी अंतर्निहित रूपांतरण क्यों करते हैं जैसे वे करते हैं?

unsigned short num = 65537; 

संख्या 1 के एक का मान (65536 घटाया गया था)। मेरा सवाल है: ऐसा क्यों होता है? मेरा अंतर्ज्ञान मुझे बताता है कि इसमें लेयर फ्लैग और ओवरफ्लो फ्लैग के साथ कुछ करना है, क्योंकि अधिकतम मान हमेशा 1111 है ....

अग्रिम धन्यवाद!

+4

यह छंटनी करता है ... – Mehrdad

+0

बिल्कुल सही उदाहरण है कि आपको मूल रूप से सभी संभव चेतावनियों को सक्षम क्यों करना चाहिए। हालांकि यह मानक में क्यों है .... कोई विचार नहीं: पी। (जब तक आप विशेष रूप से मतलब नहीं लेते हैं 1. यह सिर्फ 2 की तारीफ ओवरफ्लो है।) – Corbin

+0

ऐसे चेतावनी संदेश का उदाहरण: 'चेतावनी: बड़े पूर्णांक को बिना हस्ताक्षर किए गए प्रकार के लिए संक्षिप्त रूप से छोटा कर दिया गया है' – curiousguy

उत्तर

7

एक मशीन two's-पूरक पर हस्ताक्षर किए पूर्णांक के लिए एक एन -बिट अहस्ताक्षरित प्रकार के रूपांतरण के लिए नियमों का उपयोग करता है के लिए सभी लेकिन कम-आदेश एन बिट्स की निकालने के बराबर हैं। सामान्य हार्डवेयर के लिए, रूपांतरण करने का यह सबसे आसान तरीका है।

मानक हस्ताक्षरित पूर्णांक के लिए अन्य प्रस्तुतियों की अनुमति देता है, लेकिन स्थिरता के लिए समान रूपांतरण नियमों का उपयोग करता है। इस तरह की मशीनों पर कुछ अतिरिक्त काम की आवश्यकता हो सकती है, लेकिन (ए) ऐसी मशीनें काफी दुर्लभ हैं, और (बी) खर्च वैसे भी काफी छोटा होना चाहिए।