शुद्ध गणित की पृष्ठभूमि होने के कारण, यह किसी भी दिलचस्पी लेने वाले के लिए थोड़ा अधिक गणितीय है।
यदि हम एक 8bit हस्ताक्षरित और अहस्ताक्षरित पूर्णांक के साथ शुरू करते हैं, जो हमारे पास है वह मूल रूप से पूर्णांक modulo 256 है, तो जहां तक इसके अलावा और गुणा का संबंध है, बशर्ते 2 का पूरक नकारात्मक पूर्णांक का प्रतिनिधित्व करने के लिए उपयोग किया जाता है (और यह है कि कैसे हर आधुनिक संस्करण इसे प्रस्तुत करता है) ।
जहां चीजें अलग-अलग होती हैं वे दो स्थानों पर होती हैं: एक तुलना संचालन है। एक अर्थ में, पूर्णांक मॉडुलो 256 को संख्याओं का एक चक्र माना जाता है (जैसे पूर्णांक मॉडुलो 12 पुराने जमाने के एनालॉग क्लॉकफेस पर करते हैं)। संख्यात्मक तुलना करने के लिए (x <y) सार्थक है, हमें यह तय करने की आवश्यकता है कि कौन सी संख्या दूसरों की तुलना में कम है। गणितज्ञ के दृष्टिकोण से, हम पूर्णांक modulo 256 को किसी तरह सभी पूर्णांकों के सेट में एम्बेड करना चाहते हैं। 8 बिट पूर्णांक जिसका बाइनरी प्रतिनिधित्व सभी शून्य से पूर्णांक 0 है, का मानचित्रण करना स्पष्ट बात है। फिर हम दूसरों को मैप करने के लिए आगे बढ़ सकते हैं ताकि '0 + 1' (एक रजिस्टर को शून्य करने का परिणाम हो, कुल्हाड़ी कहे, और इसे एक से बढ़ाकर, 'inc ax' के माध्यम से) पूर्णांक 1 पर जाता है, और इसी तरह। हम -1 के साथ भी ऐसा ही कर सकते हैं, उदाहरण के लिए पूर्णांक -1, '0-1' और '0-1-1' की मैपिंग पूर्णांक -2 के लिए। हमें यह सुनिश्चित करना चाहिए कि यह एम्बेडिंग एक फ़ंक्शन है, इसलिए एक एकल 8 बिट पूर्णांक को दो पूर्णांकों में मैप नहीं कर सकता है। इस प्रकार, इसका मतलब है कि अगर हम पूर्णांक के सेट में सभी संख्याओं को मैप करते हैं, तो 0 होगा, साथ ही कुछ पूर्णांक 0 से कम और कुछ से अधिक 0. कुछ अनिवार्य रूप से 255 तरीकों से ऐसा करने के लिए 8bit पूर्णांक (तदनुसार) क्या न्यूनतम आप चाहते हैं, 0 से -255 तक)। फिर आप '0 <y - x' के संदर्भ में 'x <y' को परिभाषित कर सकते हैं।
दो सामान्य उपयोग के मामले हैं, जिनके लिए हार्डवेयर समर्थन समझदार है: एक सभी नॉनजरो पूर्णांक 0 से अधिक होने के साथ, और एक लगभग 50/50 विभाजन के साथ 0. एक अन्य सभी संभावनाओं को अतिरिक्त रूप से संख्याओं का अनुवाद करके आसानी से अनुकरण किया जाता है। और उप 'ऑपरेशन से पहले, और इसके लिए आवश्यकता इतनी दुर्लभ है कि मैं आधुनिक सॉफ़्टवेयर में स्पष्ट उदाहरण के बारे में नहीं सोच सकता (क्योंकि आप बस एक बड़े मंटिसा के साथ काम कर सकते हैं, 16 बिट्स कह सकते हैं)।
दूसरा मुद्दा 16 बिट पूर्णांक के स्थान में 8 बिट पूर्णांक की मैपिंग का है। क्या -1 -1 जाता है? यह वही है जो आप चाहते हैं यदि 0xFF -1 का प्रतिनिधित्व करने के लिए है। इस मामले में, साइन-एक्सटेंडिंग समझदारी की बात है, ताकि 0xFF 0xFFFF पर जाए। दूसरी ओर, यदि 0xFF का अर्थ 255 का प्रतिनिधित्व करना था, तो आप इसे 255 पर मैप करना चाहते हैं, इसलिए 0xFFFF के बजाय 0xFFFF पर होना चाहिए।
यह 'शिफ्ट' और 'अंकगणितीय पारी' ऑपरेशनों के बीच का अंतर है।
अंततः, हालांकि, यह इस तथ्य से नीचे आता है कि सॉफ्टवेयर में इंट का पूर्णांक नहीं है, लेकिन बाइनरी में प्रतिनिधित्व है, और केवल कुछ का प्रतिनिधित्व किया जा सकता है। हार्डवेयर डिजाइन करते समय, पसंद किया जाना चाहिए कि हार्डवेयर में मूल रूप से क्या करना है। चूंकि 2 के पूरक इसके अतिरिक्त और गुणन संचालन समान हैं, इसलिए यह इस तरह से नकारात्मक पूर्णांक का प्रतिनिधित्व करने के लिए समझ में आता है। तब यह केवल संचालन की बात है जो इस बात पर निर्भर करता है कि आपके द्विआधारी निरूपण का प्रतिनिधित्व करने के लिए कौन से पूर्णांक हैं।