C में हस्ताक्षर किए गए पूर्णांक संख्याओं का प्रतिनिधित्व करते हैं। यदि a
और b
हस्ताक्षर किए गए पूर्णांक प्रकारों के चर हैं, तो मानक को कभी भी आवश्यकता नहीं होगी कि एक संकलक अपने संबंधित मूल्यों के अंकगणितीय योग के अलावा किसी अन्य चीज़ a+=b
में अभिव्यक्ति की दुकान बनाता है a
। यह सुनिश्चित करने के लिए, यदि अंकगणित योग में फिट नहीं होगा a
, तो प्रोसेसर हो सकता है यह वहाँ डाल करने में सक्षम नहीं है, लेकिन मानक काटना संकलक की आवश्यकता नहीं होगी या मूल्य लपेटो, या मान जो अधिक हो जाती हैं उस बात के लिए कुछ और उनके प्रकारों के लिए सीमा। ध्यान दें कि जब मानक को इसकी आवश्यकता नहीं होती है, तो सी कार्यान्वयन को हस्ताक्षरित मूल्यों के साथ अंकगणितीय ओवरफ्लो को फंसाने की अनुमति दी जाती है।
C में अनइंस्टॉल किए गए पूर्णांकों में पूर्णांकों के अमूर्त बीजगणितीय वलयों के रूप में व्यवहार किया जाता है, जो दो प्रकार की शक्ति है, जिसमें बड़े, प्रकारों के साथ रूपांतरण, या परिचालनों को शामिल करते हुए, दो की कुछ शक्ति है। किसी भी आकार के पूर्णांक को 32-बिट अहस्ताक्षरित रूप में परिवर्तित करने से सदस्य को उन चीज़ों के अनुरूप मिलेगा, जो कि पूर्णांक mod 4,294,967,296 के अनुरूप हैं। 2 पैदावार 4,294,967,295 में से 3 को घटा देने का कारण यह है कि 4,294,967,295 में 3 से कुछ के लिए कुछ के साथ कुछ जोड़ने पर 2 से कुछ बधाई मिलेगी।
सार बीजीय के छल्ले प्रकार अक्सर काम की चीजें हैं; दुर्भाग्य से, सी एक प्रकार का अँगूठी के रूप में व्यवहार करना चाहिए या नहीं, इसके लिए निर्णायक कारक के रूप में सी का उपयोग किया जाता है। बड़े प्रकारों में परिवर्तित होने पर रिंग सदस्यों के बजाय बदतर, अहस्ताक्षरित मानों को संख्याओं के रूप में माना जाता है, और int
जब कोई अंकगणित उन पर किया जाता है, तो संख्याओं में परिवर्तित होने से छोटा अहस्ताक्षरित मान । अगर v
एक uint32_t
समान है 4,294,967,294
, तो v*=v;
बनाना चाहिए v=4
। दुर्भाग्य से, अगर int
64 बिट्स है, तो कोई भी नहीं बता रहा है कि क्या v*=v;
कर सकता है।
मानक के रूप में यह देखते हुए, मैं उन स्थितियों में अहस्ताक्षरित प्रकारों का उपयोग करने का सुझाव दूंगा जहां कोई बीजीय रिंगों से जुड़ा व्यवहार चाहता है, और हस्ताक्षरित प्रकार जब कोई संख्याओं का प्रतिनिधित्व करना चाहता है। यह दुर्भाग्यपूर्ण है कि सी ने उन भेदों को आकर्षित किया जिस तरह से उन्होंने किया, लेकिन वे वही हैं जो वे हैं।