अधिकांश स्पष्टीकरणों की तरह, जो मैंने देखा है, 2 के पूरक के साथ काम करने के तरीके के बारे में स्पष्ट हैं, लेकिन वास्तव में यह नहीं समझाते कि वे गणितीय रूप से क्या हैं । मैं कम से कम पूर्णांकों के लिए ऐसा करने की कोशिश करूंगा, और मैं कुछ ऐसी पृष्ठभूमि को कवर करूंगा जो संभवत: पहले परिचित हो।
याद रखें कि यह दशमलव के लिए कैसे काम करता है:
2345 2 × 10 3 + 3 × 10 2 + 4 × 10 1 + 5 × 10 0
लिखने का एक तरीका है ।
उसी तरह, बाइनरी समान सामान्य विचार का अनुसरण करते हुए सिर्फ 0 और 1 का उपयोग करके संख्या लिखने का एक तरीका है, लेकिन उन 10s को 2s से ऊपर प्रतिस्थापित करना। फिर बाइनरी में,
1111 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0
लिखने का एक तरीका है और यदि आप इसे काम करते हैं, तो यह 15 (बेस 10) के बराबर हो जाता है। ऐसा इसलिए है क्योंकि यह 8 + 4 + 2 + 1 = 15 है।
सकारात्मक संख्याओं के लिए यह सब ठीक है और अच्छा है। यहां तक कि यह नकारात्मक संख्याओं के लिए भी काम करता है यदि आप उनके सामने सिर्फ एक माइनस साइन छड़ी करने के लिए तैयार हैं, जैसा कि मनुष्य दशमलव संख्याओं के साथ करते हैं। यह भी कंप्यूटर में किया जा सकता है, की तरह है, लेकिन मैं 1970 के दशक के बाद से ऐसा कंप्यूटर नहीं देखा है। मैं एक अलग चर्चा के कारणों को छोड़ दूँगा।
कंप्यूटर के लिए यह नकारात्मक संख्याओं के पूरक प्रतिनिधित्व का उपयोग करने के लिए अधिक कुशल निकला । और यहाँ कुछ ऐसा है जिसे अक्सर अनदेखा किया जाता है। पूरक सूचनाओं में संख्या के अंकों में किसी प्रकार का उलटफेर शामिल होता है, यहां तक कि सामान्य शून्य से पहले आने वाले निहित शून्य भी। यह अजीब है, क्योंकि सवाल उठता है: उनमें से सभी? माना जा सकता है कि अंकों की एक अनंत संख्या है।
सौभाग्य से, कंप्यूटर शिशुओं का प्रतिनिधित्व नहीं करते हैं। संख्या एक विशेष लंबाई (या चौड़ाई, यदि आप चाहें) के लिए विवश हैं। तो चलो सकारात्मक बाइनरी नंबर पर लौटते हैं, लेकिन एक विशेष आकार के साथ। मैं इन उदाहरणों के लिए 8 अंक ("बिट्स") का उपयोग करूंगा। तो हमारा बाइनरी नंबर वास्तव में
00001111
या
0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 होगा।
2 के पूरक को नकारात्मक बनाने के लिए, हम पहले
11110000 बनाने के लिए सभी (बाइनरी) अंकों को पूरक करते हैं
और 11110001 बनाने के लिए 1
जोड़ते हैं
लेकिन हम कैसे समझ रहे हैं कि इसका मतलब -15 है?
इसका उत्तर यह है कि हम उच्च-क्रम बिट (सबसे बाईं ओर) का अर्थ बदलते हैं। यह बिट सभी नकारात्मक संख्याओं के लिए 1 होगा । यह परिवर्तन दिखाई देने वाली संख्या के मूल्य में इसके योगदान के संकेत को बदलने के लिए होगा। इसलिए अब हमारे 11110001 का प्रतिनिधित्व करने के लिए समझा जाता है
- 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0
ध्यान दें कि "-" उस अभिव्यक्ति के सामने है? इसका मतलब है कि साइन बिट का भार -2 7 है , जो कि -128 (बेस 10) है। अन्य सभी पद उसी भार को बनाए रखते हैं जो उनके पास अहस्ताक्षरित बाइनरी संख्या में था।
हमारे -15 काम करते हुए, यह
-128 + 64 + 32 + 16 + 1 है,
इसे अपने कैलकुलेटर पर आज़माएं। यह -15 है।
मैंने जिन तीन मुख्य तरीकों को कंप्यूटर में दर्शाया नकारात्मक संख्याओं में से देखा है, उनमें से 2 के पूरक सामान्य उपयोग में सुविधा के लिए हाथ जीतते हैं। हालांकि इसमें एक विषमता है। चूंकि यह द्विआधारी है, इसलिए संभावित बिट संयोजनों की एक समान संख्या होनी चाहिए। प्रत्येक सकारात्मक संख्या को इसके ऋणात्मक के साथ जोड़ा जा सकता है, लेकिन केवल एक शून्य है। एक शून्य की उपेक्षा करने से आप शून्य हो जाते हैं। तो एक और संयोजन है, साइन बिट में 1 के साथ संख्या और 0 हर जगह। संबंधित सकारात्मक संख्या बिट्स की संख्या में फिट नहीं होगी।
इस संख्या के बारे में और भी अजीब बात यह है कि यदि आप किसी एक को पूरक और जोड़कर उसका सकारात्मक बनाने की कोशिश करते हैं, तो आपको वही नकारात्मक संख्या वापस मिल जाती है। ऐसा लगता है कि शून्य ऐसा करेगा, लेकिन यह अप्रत्याशित है और हमारे द्वारा उपयोग किए जाने वाले सभी व्यवहारों पर नहीं क्योंकि कंप्यूटर एक तरफ, हम आम तौर पर अंकों की असीमित आपूर्ति के बारे में सोचते हैं, न कि यह निश्चित लंबाई के अंकगणित।
यह विषमताओं के हिमखंड की नोक की तरह है। सतह के नीचे प्रतीक्षा में अधिक झूठ है, लेकिन इस चर्चा के लिए पर्याप्त है। यदि आप निश्चित बिंदु अंकगणित के लिए "अतिप्रवाह" पर शोध करते हैं, तो आप शायद अधिक पा सकते हैं। यदि आप वास्तव में इसे प्राप्त करना चाहते हैं, तो आप "मॉड्यूलर अंकगणित" पर भी शोध कर सकते हैं।