यह इसलिए किया गया है ताकि नकारात्मक संख्याओं से निपटने के लिए किसी विशेष तर्क की आवश्यकता न पड़े। की जाँच करें विकिपीडिया पर लेख ।
मान लें कि आपके दो नंबर हैं, 2 और -1। संख्याओं का प्रतिनिधित्व करने के आपके "सहज" तरीके से, वे क्रमशः 0010
और 1001
, (मैं आकार के लिए 4 बिट्स चिपका रहा हूं)। में दो के पूरक भी तरह से, वे कर रहे हैं 0010
और 1111
। अब, मैं कहता हूं कि मैं उन्हें जोड़ना चाहता हूं।
दो का पूरक जोड़ बहुत सरल है। आप सामान्य रूप से संख्याएँ जोड़ते हैं और अंत में किसी भी कैरी बिट को छोड़ दिया जाता है। तो वे इस प्रकार हैं:
0010
+ 1111
=10001
= 0001 (discard the carry)
0001
1 है, जो "2 + (- 1)" का अपेक्षित परिणाम है।
लेकिन आपकी "सहज" विधि में, जोड़ना अधिक जटिल है:
0010
+ 1001
= 1011
जो -3 है, सही है? साधारण जोड़ इस मामले में काम नहीं करते हैं। आपको यह ध्यान देने की आवश्यकता है कि संख्याओं में से एक ऋणात्मक है और यदि यह मामला है तो एक अलग एल्गोरिथ्म का उपयोग करें।
इस "सहज" भंडारण विधि के लिए, घटाव जोड़ की तुलना में एक अलग ऑपरेशन है, इससे पहले कि वे जोड़े जा सकते हैं, संख्याओं पर अतिरिक्त जांच की आवश्यकता होती है। चूंकि आप चाहते हैं कि सबसे बुनियादी संचालन (इसके अलावा, घटाव, आदि) जितनी जल्दी हो सके, आपको एक तरह से संख्याओं को संग्रहीत करने की आवश्यकता होती है जो आपको सबसे सरल एल्गोरिदम का उपयोग करने की अनुमति देता है।
इसके अतिरिक्त, "सहज" संग्रहण विधि में, दो शून्य हैं:
0000 "zero"
1000 "negative zero"
जो सहज रूप से एक ही संख्या में हैं, लेकिन संग्रहीत होने पर दो अलग-अलग मूल्य हैं। प्रत्येक एप्लिकेशन को यह सुनिश्चित करने के लिए अतिरिक्त कदम उठाने की आवश्यकता होगी कि गैर-शून्य मान भी नकारात्मक शून्य नहीं हैं।
इस तरह से भंडारण करने के साथ एक और बोनस है, और जब आपको रजिस्टर की चौड़ाई का विस्तार करने की आवश्यकता होती है, तो मूल्य को संग्रहीत किया जा रहा है। दो के पूरक के साथ, 8-बिट रजिस्टर में 4-बिट संख्या को संग्रहीत करना दोहराए जाने का मामला है। सबसे महत्वपूर्ण बिट:
0001 (one, in four bits)
00000001 (one, in eight bits)
1110 (negative two, in four bits)
11111110 (negative two, in eight bits)
यह सिर्फ छोटे शब्द के साइन बिट को देखने और इसे दोहराने की बात है जब तक कि यह बड़े शब्द की चौड़ाई को नहीं बढ़ाता।
अपने तरीके से आपको मौजूदा बिट को खाली करने की आवश्यकता होगी, जो पैडिंग के अतिरिक्त एक अतिरिक्त ऑपरेशन है:
0001 (one, in four bits)
00000001 (one, in eight bits)
1010 (negative two, in four bits)
10000010 (negative two, in eight bits)
आपको अभी भी उन दोनों मामलों में अतिरिक्त 4 बिट्स सेट करने की आवश्यकता है, लेकिन "सहज" मामले में आपको 5 बिट को भी साफ़ करने की आवश्यकता है। यह हर एप्लिकेशन में मौजूद सबसे मौलिक और सामान्य संचालन में से एक में एक छोटा अतिरिक्त कदम है।