दो का अनुपूरण

From Vigyanwiki

दो का अनुपूरण गणितीय संक्रिया है जो धनात्मक द्विआधारी संख्या को ऋणात्मक द्विआधारी संख्या में समतुल्य ऋणात्मक मान के साथ परिवर्तित करता है, जिसमें चिह्न के रूप में महानतम स्थानीय मान के साथ सबसे महत्वपूर्ण बिट या द्विआधारी अंक का उपयोग किया जाता है। यह इंगित करने के लिए कि द्विआधारी संख्या धनात्मक है या ऋणात्मक। इस प्रकार से इसका उपयोग कंप्यूटर विज्ञान में कंप्यूटर पर सबसे सामान्य चिन्हित संख्या प्रतिनिधित्व (धनात्मक, ऋणात्मक और शून्य) पूर्णांकों (कंप्यूटर विज्ञान) और अधिक सामान्यतः, निश्चित-बिंदु अंकगणितीय मानों का प्रतिनिधित्व करने की सबसे सामान्य विधि के रूप में किया जाता है।[1] अतः जब सबसे महत्वपूर्ण बिट 1 होता है, तो संख्या को ऋणात्मक के रूप में चिन्हित किया जाता है; और जब सबसे महत्वपूर्ण बिट 0 होता है तो संख्या को धनात्मक के रूप में चिन्हित किया जाता है (see दो के पूरक निरूपण से परिवर्तन करना, नीचे)

प्रक्रिया

इस प्रकार से दो का अनुपूरण निम्न द्वारा प्राप्त किया जाता है:

  • चरण 1: समतुल्य धनात्मक संख्या से प्रारंभ करना।
  • चरण 2: सभी बिट को व्युत्क्रमित करना (या फ़्लिप करना) - प्रत्येक 0 से 1, और प्रत्येक 1 से 0 में बदलना;
  • चरण 3: किसी भी पूर्णांक अतिप्रवाह को अनदेखा करते हुए, संपूर्ण व्युत्क्रम संख्या में 1 जोड़ना। अतिप्रवाह के लिए लेखांकन परिणाम के लिए अनुचित मान उत्पन्न करेगा।

इस प्रकार से उदाहरण के लिए, द्विआधारी में दशमलव संख्या -6 की गणना करने के लिए:

  • चरण 1: दशमलव में +6 द्विआधारी में 0110 है; सबसे बायां महत्वपूर्ण बिट (प्रथम 0) चिन्ह (गणित) है। +6 110 नहीं है, क्योंकि द्विआधारी में 110 दशमलव में −2 है।
  • चरण 2: 0110 में सभी बिट को व्युत्क्रमित करें, 1001 दें।
  • चरण 3: फ़्लिप किए गए संख्या 1001 में स्थानीय मान 1 जोड़ें, जिससे 1010 मिलता है।

इस प्रकार से यह सत्यापित करने के लिए कि 1010 का वस्तुतः -6 मान है, स्थानीय मानों को साथ जोड़ें, परन्तु अंतिम गणना से चिह्न को घटाएँ। चूँकि प्रथम महत्वपूर्ण अंक संख्या चिह्न है, इसलिए उचित परिणाम प्राप्त करने के लिए इसे घटाया जाना चाहिए: 1010 = (1×−2)3) + (0×22) + (1×21) + (0×20) = 1×−8 + 0 + 1×2 + 0 = −6।

बिट: 1 0 1 0
दशमलव बिट मान: −8 4 2 1
द्विआधारी गणना: (1×−23) (0×22) (1×21) (0×20)
दशमलव गणना: 1×−8 0 1×2 0

सिद्धांत

इस प्रकार से दो का अनुपूरण, अनुपूरण की विधि का उदाहरण है। नाम में 'दो' उस शब्द को संदर्भित करता है, जो N-बिट प्रणाली में पूर्ण रूप से विस्तारित है, वस्तुतः "N की घात के लिए दो" है - 2N (एकमात्र स्थिति जहां इस शब्द में वस्तुतः 'दो' का उत्पादन किया जाएगा) N = 1, इसलिए 1-बिट प्रणाली के लिए, परन्तु इनमें चिह्न और शून्य दोनों के लिए क्षमता नहीं है), और यह मात्र यह पूर्ण शब्द है जिसके संबंध में अनुपूरण की गणना की जाती है। अतः इस प्रकार, N-बिट संख्या के दो के अनुपूरण की यथार्थ परिभाषा 2N के संबंध में उस संख्या का अनुपूरण है।

2N के संबंध में किसी संख्या का अनुपूरण होने की परिभाषित गुण बस यह है कि मूल उत्पादन के साथ इस संख्या का योग 2N है। इस प्रकार से उदाहरण के लिए, तीन-बिट तक की संख्याओं के साथ द्विआधारी का उपयोग करना (इसलिए N = 3 और 2N = 23 = 8 = 10002, जहाँ '2' द्विआधारी प्रतिनिधित्व को इंगित करता है), संख्या 3(0112) के लिए दो का अनुपूरण 5(1012) है), क्योंकि मूल को जोड़ने पर यह 23 = 10002 = 0112 + 1012 प्राप्त होता है। इस प्रकार से जहां इस पत्राचार को ऋणात्मक संख्याओं का प्रतिनिधित्व करने के लिए नियोजित किया जाता है, इसका प्रभावी रूप से अर्थ है, दशमलव अंकों और संख्या-स्थान के साथ सादृश्य का उपयोग करके मात्र 0 से 7 तक आठ गैर-ऋणात्मक संख्याओं की अनुमति देना, संख्या-स्थान को दो समूहों में विभाजित करना: पहले चार संख्याएँ 0 1 2 3 वही रहती हैं, जबकि शेष चार ऋणात्मक संख्याओं को एन्कोड करते हैं, अपने बढ़ते क्रम को बनाए रखते हैं, जिससे 4 nकोड -4, 5 nकोड -3, 6 nकोड -2 और 7 nकोड -1 बनाते हैं। यद्यपि, द्विआधारी प्रतिनिधित्व की अतिरिक्त उपयोगिता है, क्योंकि सबसे महत्वपूर्ण बिट समूह (और चिह्न) को भी इंगित करता है: यह गैर-ऋणात्मक के पहले समूह के लिए 0 है, और ऋणात्मक के दूसरे समूह के लिए 1 है। दाईं ओर दी गई तालिकाएँ इस गुण को दर्शाती हैं।

तीन-बिट पूर्णांक
बिट अचिन्हित मान चिन्हित मान

(दो का अनुपूरण)

000 0 0
001 1 1
010 2 2
011 3 3
100 4 −4
101 5 −3
110 6 −2
111 7 −1
Eight-bit integers
बिट अचिन्हित मान चिन्हित मान

(दो का अनुपूरण)

0000 0000 0 0
0000 0001 1 1
0000 0010 2 2
0111 1110 126 126
0111 1111 127 127
1000 0000 128 −128
1000 0001 129 −127
1000 0010 130 −126
1111 1110 254 −2
1111 1111 255 −1

इस प्रकार से किसी धनात्मक संख्या के द्विआधारी दो के अनुपूरण की गणना का अर्थ अनिवार्य रूप से संख्या को 2N से घटाना है। परन्तु जैसा कि तीन-बिट उदाहरण और चार-बिट 10002 (23) के लिए देखा जा सकता है, जो संख्या 2N स्वयं N बिट तक सीमित प्रणाली में प्रतिनिधित्व योग्य नहीं होगी, क्योंकि यह N बिट स्थान ठीक बाहर है (संख्या है फिर भी N-बिट प्रणाली में "दो के अनुपूरण" का संदर्भ बिंदु)। इस कारण से, अधिकतम N-बिट वाले प्रणाली को घटाव को दो संक्रियकों में तोड़ना होगा: पहले N-बिट प्रणाली में अधिकतम संख्या से घटाना, जो कि 2N-1 है (द्विआधारी में यह शब्द वस्तुतः एक साधारण संख्या है जिसमें 'सभी 1' सम्मिलित हैं, और इसमें से घटाव संख्या में सभी बिट को व्युत्क्रमित करके किया जा सकता है जिसे बिटवाइज़ नॉट संक्रिया के रूप में भी जाना जाता है) और फिर एक को जोड़ना है। अतः संयोग से, को जोड़ने से पहले उस मध्यवर्ती संख्या का उपयोग कंप्यूटर विज्ञान में चिन्हित संख्या प्रतिनिधित्व की अन्य विधि के रूप में भी किया जाता है और इसे एकल अनुपूरण कहा जाता है (यह नाम इसलिए दिया गया है क्योंकि ऐसी संख्या को मूल के साथ जोड़ने पर 'सभी 1' मिलते हैं)।

इस प्रकार से चिन्हित संख्याओं (इस प्रकार से उदाहरण के लिए, लोगों के अनुपूरण) का प्रतिनिधित्व करने के लिए अन्य प्रणालियों की तुलना में, दोनों के अनुपूरण का लाभ यह है कि योग, घटाव और गुणा के मौलिक अंकगणितीय संचालन अचिन्हित द्विआधारी संख्याओं के समान हैं (जब तक इनपुट का प्रतिनिधित्व किया जाता है) आउटपुट के समान बिट की संख्या में, और उन बिट से परे किसी भी पूर्णांक अतिप्रवाह को परिणाम से हटा दिया जाता है)। अतः यह गुण प्रणाली को लागू करना सरल बनाता है, विशेषकर उच्च-परिशुद्धता अंकगणित के लिए। इसके अतिरिक्त, के अनुपूरण प्रणाली के विपरीत, दो के अनुपूरण में चिन्हित शून्य के लिए कोई प्रतिनिधित्व नहीं है, और इस प्रकार इससे संबंधित जटिलताओं का सामना नहीं करना पड़ता है। अन्यथा, दोनों योजनाओं में वांछित गुण है कि पूर्णांक के चिह्न को उसके द्विआधारी प्रतिनिधित्व के अनुपूरण को लेकर व्युत्क्रमित किया जा सकता है, परन्तु दो के घटक में अपवाद है - सबसे कम ऋणात्मक, जैसा कि तालिकाओं में देखा जा सकता है।[2]

इतिहास

इस प्रकार से दशमलव जोड़ने वाली मशीनों और यांत्रिक कैलकुलेटरों में घटाव करने के लिए अनुपूरण की विधि का उपयोग लंबे समय से किया जा रहा था। जॉन वॉन न्यूमैन ने इलेक्ट्रॉनिक संग्रहित-प्रोग्राम डिजिटल कंप्यूटर के लिए ईडीवीएसी प्रस्ताव पर रिपोर्ट के 1945 के पहले ड्राफ्ट में दो के अनुपूरण द्विआधारी प्रतिनिधित्व का उपयोग करने का सुझाव दिया।[3] अतः 1949 ईडीएसएसी, जो पहले ड्राफ्ट से प्रेरित था, ने ऋणात्मक द्विआधारी पूर्णांकों के दो अनुपूरण प्रतिनिधित्व का उपयोग किया।

सीडीसी 6600, एलआईnसी, पीडीपी-1, और यूनीवैक 1107 सहित कई प्रारंभिक कंप्यूटर, अनुपूरण संकेतन का उपयोग करते हैं; यूनीवैक 1107, यूनीवैक 1100/2200 श्रृंखला के वंशजों ने ऐसा करना जारी रखा था। इस प्रकार से आईबीएम 700/7000 श्रृंखला की वैज्ञानिक मशीनें सूचकांक रजिस्टरों को छोड़कर, जो दो के अनुपूरण हैं, संकेत/परिमाण संकेतन का उपयोग करती हैं। प्रारम्भिक व्यावसायिक कंप्यूटरों में दो अनुपूरण रूपों में ऋणात्मक मान संग्रहीत होते हैं, जिनमें अंग्रेजी इलेक्ट्रिक ड्यूस (1955) और डिजिटल उपकरण निगम पीडीपी-11 (1963) और पीडीपी-6 (1964) सम्मिलित हैं। अतः आईबीएम प्रणाली/360, जिसे 1964 में आईबीएम द्वारा प्रस्तुत किया गया था, जो उस समय कंप्यूटर उद्योग में प्रमुख खिलाड़ी था, इसने दो के अनुपूरण को कंप्यूटर उद्योग में सबसे व्यापक रूप से उपयोग किया जाने वाला द्विआधारी प्रतिनिधित्व बना दिया था। प्रथम मिनीकंप्यूटर, पीडीपी-8, जिसे 1965 में प्रस्तुत किया गया था, 1969 दिनांक सामान्य नोवा, 1970 पीडीपी-11 और लगभग सभी बाद के मिनीकंप्यूटरों और माइक्रोकंप्यूटरों के जैसे दो अनुपूरण अंकगणित का उपयोग करता है।

दो के अनुपूरण प्रतिनिधित्व से परिवर्तित करना

अतः एक दो-अनुपूरण संख्या प्रणाली द्विआधारी संख्या प्रतिनिधित्व में धनात्मक और ऋणात्मक संख्याओं को एन्कोड करती है। प्रत्येक बिट का महत्व दो की घात है, सबसे महत्वपूर्ण बिट को छोड़कर, जिसका महत्व दो की संबंधित घात का ऋणात्मक है।

इस प्रकार से N-बिट पूर्णांक का मान w निम्नलिखित सूत्र द्वारा दिया गया है:

सबसे महत्वपूर्ण बिट संख्या का चिह्न निर्धारित करता है और कभी-कभी इसे चिन्ह बिट भी कहा जाता है। अतः संकेत-और-परिमाण प्रतिनिधित्व के विपरीत, संकेत बिट का महत्व भी होता है −(2N − 1) ऊपर दिखाया गया है। N बिट का उपयोग करके, −(2N − 1) से 2N − 1 − 1 तक के सभी पूर्णांकों को दर्शाया जा सकता है।

दो के अनुपूरण प्रतिनिधित्व में परिवर्तित करना

दो के अनुपूरण अंकन में, गैर-ऋणात्मक संख्या को उसकी सामान्य द्विआधारी अंक प्रणाली द्वारा दर्शाया जाता है; इस स्थिति में, सबसे महत्वपूर्ण बिट 0 है। यद्यपि, दर्शाई गई संख्याओं की सीमा अचिन्हित द्विआधारी संख्याओं के समान नहीं है। इस प्रकार से उदाहरण के लिए, 8-बिट अचिन्हित संख्या 0 से 255 (11111111) मान का प्रतिनिधित्व कर सकती है। यद्यपि, दो की अनुपूरण 8-बिट संख्या मात्र 0 से 127 (01111111) तक गैर-ऋणात्मक पूर्णांक का प्रतिनिधित्व कर सकती है, क्योंकि '1' के रूप में सबसे महत्वपूर्ण बिट के साथ शेष बिट संयोजन ऋणात्मक पूर्णांक -1 से -128 का प्रतिनिधित्व करते हैं।

इस प्रकार से दोनों का अनुपूरण संक्रिया योगात्मक व्युत्क्रम संक्रिया है, इसलिए ऋणात्मक संख्याओं को दोनों के निरपेक्ष मान के अनुपूरण द्वारा दर्शाया जाता है।

अपने अनुपूरण से

एक ऋणात्मक द्विआधारी संख्या के दोनों अनुपूरण प्राप्त करने के लिए, बिटवाइज़ NOT संक्रिया का उपयोग करके सभी बिट को व्युत्क्रमित या फ़्लिप किया जाता है; फिर 1 का मान परिणामी मान में योग दिया जाता है, उस अतिप्रवाह को अनदेखा कर दिया जाता है जो दोनों के बीच 0 का अनुपूरण लेते समय होता है।

इस प्रकार से उदाहरण के लिए, 1 बाइट (=8 बिट) का उपयोग करके, दशमलव संख्या 5 को

0000 01012

द्वारा दर्शाया जाता है, सबसे महत्वपूर्ण बिट (इस स्थिति में सबसे बाईं ओर का बिट) 0 है, इसलिए प्रतिरूप गैर-ऋणात्मक मान का प्रतिनिधित्व करता है। अतः दो-अनुपूरण संकेतन में -5 में परिवर्तित करने के लिए, सबसे पहले, सभी बिट व्युत्क्रमित होते हैं, अर्थात: 0 1 बन जाता है और 1 0 बन जाता है:

1111 10102

इस बिंदु पर, प्रतिनिधित्व दशमलव मान -5 का अनुपूरण है। दोनों का अनुपूरण प्राप्त करने के लिए, परिणाम में 1 जोड़ा जाता है, जिससे:

1111 10112

परिणाम चिन्हित द्विआधारी संख्या है जो दो-अनुपूरण रूप में दशमलव मान -5 का प्रतिनिधित्व करता है। इस प्रकार से सबसे महत्वपूर्ण बिट 1 है, इसलिए दर्शाया गया मान ऋणात्मक है।

सबसे ऋणात्मक संख्या के विशेष स्थिति को छोड़कर, किसी ऋणात्मक संख्या का दोनों का अनुपूरण संगत धनात्मक मान होता है। इस प्रकार से उदाहरण के लिए, −5 (ऊपर) के बिट को व्युत्क्रमित करने पर यह मिलता है:

0000 01002

और जोड़ने पर अंतिम मान मिलता है:

0000 01012

अतः इसी प्रकार, दोनों का शून्य का अनुपूरण शून्य है: व्युत्क्रमित करने से सभी मिलते हैं, और जोड़ने से वापस शून्य में बदल जाता है (चूंकि अतिप्रवाह को अनदेखा कर दिया जाता है)।

प्रतिनिधित्व करने योग्य सबसे ऋणात्मक संख्या का दोनों का अनुपूरण (इस प्रकार से उदाहरण के लिए सबसे महत्वपूर्ण बिट के रूप में और अन्य सभी बिट शून्य) ही हैं। अतः इसलिए, 'अतिरिक्त' ऋणात्मक संख्या है जिसके लिए दो का अनुपूरण निषेधन नहीं देता है, अतः नीचे § सर्वाधिक ऋणात्मक संख्या देखें।

2n से घटाव

इस प्रकार से किसी संख्या और उसके अनुपूरण का योग सभी 1 बिट्स के साथ एक N-शब्द है, जो (एक अचिन्हित द्विआधारी संख्या के रूप में पढ़ा जाता है) 2N − 1 है। फिर इसके दो अनुपूरण में संख्या जोड़ने से N न्यूनतम बिट्स 0 पर समूहित हो जाता है और चलन बिट 1 हो जाता है, जहां बाद वाले का महत्व 2N होता है (इसे अचिन्हित द्विआधारी संख्या के रूप में पढ़ा जाता है)। अत: अचिन्हित द्विआधारी अंकगणित में धनात्मक x के दो-अनुपूरण ऋणात्मक संख्या x* का मान समानता x* = 2Nx को संतुष्ट करता है।[lower-alpha 1]

इस प्रकार से उदाहरण के लिए, -5 का चार-बिट प्रतिनिधित्व खोजने के लिए (सबस्क्रिप्ट मूलांक को दर्शाते हैं):

x = 510 इसलिए x = 01012

इसलिए, N = 4 के साथ:

x* = 2Nx = 24 − 510 = 1610 - 510 = 100002 − 01012 = 10112

गणना पूर्ण रूप से आधार 10 में की जा सकती है, अंत में आधार 2 में परिवर्तित की जा सकती है:

x* = 2Nx = 24 − 510 = 1110 = 10112

एलएसबी से एमएसबी की ओर कार्य करना

इस प्रकार से किसी द्विआधारी संख्या को उसके दो अनुपूरण में मैन्युअल रूप से परिवर्तित करने का शॉर्टकट कम से कम महत्वपूर्ण बिट (एलएसबी) से प्रारम्भ करना है, और एलएसबी से सबसे महत्वपूर्ण बिट (एमएसबी) की ओर कार्य करते हुए सभी शून्यों को अनुकारित करना है जब तक कि पहले 1 तक नहीं पहुंच जाता है; फिर उस 1 को अनुकारित करें, और शेष सभी बिट को फ़्लिप करें (यदि प्रारंभिक संख्या संकेत-और-परिमाण प्रतिनिधित्व में थी तो एमएसबी को 1 के रूप में छोड़ दें)। यह शॉर्टकट किसी व्यक्ति को किसी संख्या को उसके दो के अनुपूरण में बदलने की अनुमति देता है, बिना पहले उसका अनुपूरण बनाए। इस प्रकार से उदाहरण के लिए: दो के अनुपूरण प्रतिनिधित्व में, 0011 1100 का निषेधन 1100 0100 है, जहां प्रतिलिपि संक्रिया द्वारा रेखांकित अंक अपरिवर्तित थे (जबकि शेष अंक फ़्लिप किए गए थे)।

अतः कंप्यूटर परिपथिकी में, यह विधि अनुपूरण और विधि जोड़ने से तीव्र नहीं है; दोनों विधियों में तर्क परिवर्तन को बढ़ावा देने के लिए दाएं से बाएं तक क्रमिक रूप से कार्य करने की आवश्यकता होती है। किसी को अनुपूरण करने और जोड़ने की विधि को मानक चलन लुक-फ़ॉरवर्ड योजक परिपथ द्वारा तीव्र किया जा सकता है; एमएसबी विधि की ओर एलएसबी को समान तर्क परिवर्तन द्वारा तीव्र किया जा सकता है।

चिन्ह एक्सटेंशन

दो के अनुपूरण का उपयोग करके 7- और 8-बिट पूर्णांकों में चिन्ह-बिट पुनरावृत्ति
दशमलव 7-बिट संकेतन 8-बिट संकेतन
−42  1010110 1101 0110
42  0101010 0010 1010

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

इसी प्रकार, जब किसी संख्या को दाईं ओर स्थानांतरित किया जाता है, तो सबसे महत्वपूर्ण बिट, जिसमें चिन्ह सूचना होती है, जो इसको बनाए रखा जाना चाहिए। यद्यपि, जब बाईं ओर स्थानांतरित किया जाता है, तो थोड़ा सा बाहर स्थानांतरित हो जाता है। ये नियम सामान्य शब्दार्थ को संरक्षित करते हैं कि बायीं पाली संख्या को दो से गुणा करती है और दाहिनी पाली संख्या को दो से विभाजित करती है। यद्यपि, यदि सबसे महत्वपूर्ण बिट 0 से 1 (और इसके विपरीत) में बदल जाता है, तो उस स्थिति में अतिप्रवाह कहा जाता है जब मान चिन्हित पूर्णांक का प्रतिनिधित्व करता है।

कुछ गुणन एल्गोरिदम के लिए परिशुद्धता को स्थानांतरित करना और दोगुना करना दोनों महत्वपूर्ण हैं। ध्यान दें कि योग और घटाव के विपरीत, चिन्हित और अचिन्हित संख्याओं के लिए चौड़ाई विस्तार और दायां स्थानांतरण अलग-अलग विधि से किया जाता है।

सबसे ऋणात्मक संख्या

अतः मात्र अपवाद के साथ, दो-अनुपूरण प्रतिनिधित्व में किसी भी संख्या से प्रारम्भ करते हुए, यदि सभी बिट फ़्लिप किए जाते हैं और 1 जोड़ा जाता है, तो उस संख्या के ऋणात्मक का दो-अनुपूरण प्रतिनिधित्व प्राप्त होता है। धनात्मक 12 ऋणात्मक 12 बन जाता है, धनात्मक 5 ऋणात्मक 5 बन जाता है, शून्य शून्य हो जाता है (+ अतिप्रवाह), आदि।

दोनों −128 के अनुपूरण हैं
−128 1000 0000
व्युत्क्रम बिट 0111 1111
एक जोड़ें 1000 0000
Result is the same 8 bit binary number.

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

सबसे ऋणात्मक संख्या की उपस्थिति अप्रत्याशित प्रोग्रामिंग बग्स को जन्म दे सकती है जहां परिणाम में अप्रत्याशित संकेत होता है, या अप्रत्याशित अतिप्रवाह अपवाद की ओर जाता है, या पूर्ण रूप से असामान्य व्यवहार की ओर जाता है। इस प्रकार से उदाहरण के लिए,

  • एकात्मक निषेध संचालिका किसी अशून्य संख्या का चिह्न नहीं बदल सकती। जैसे, −(−128)  ⟼  −128   (जहाँ को वैसे ही पढ़ा जाता है जैसे बन जाता है)।
  • निरपेक्ष मान का कार्यान्वयन ऋणात्मक संख्या लौटा सकता है;[4] जैसे,   abs(−128)  ⟼  −128 .
  • इसी प्रकार, −1 से गुणा अपेक्षित रूप से कार्य करने में विफल हो सकता है; इस प्रकार से उदाहरण के लिए, (−128) × (−1)  ⟼  −128 .
  • −1 से भाग देने पर अपवाद हो सकता है (जैसा कि 0 से भाग देने पर होता है);[5] यहां तक ​​कि -1 द्वारा शेषफल (या मॉड्यूलो) की गणना भी इस अपवाद को ट्रिगर कर सकती है; इस प्रकार से उदाहरण के लिए,[6] जैसे, (−128) ÷ (−1)  ⟼  [CRASH] , (−128) % (−1)  ⟼  [CRASH] .

अतः C (प्रोग्रामिंग भाषा) और C++ प्रोग्रामिंग भाषाओं में, उपरोक्त व्यवहार अपरिभाषित व्यवहार हैं और न मात्र वे असामान्य परिणाम दे सकते हैं, बल्कि कंपाइलर यह मानने के लिए स्वतंत्र है कि प्रोग्रामर ने यह सुनिश्चित किया है कि अपरिभाषित संख्यात्मक संचालन कभी नहीं होगा, और उस धारणा से निष्कर्ष निकालें।[6] यह कई अनुकूलन सक्षम करता है, परन्तु इन अपरिभाषित गणनाओं वाले कार्यक्रमों में कई असामान्य बग भी उत्पन्न करता है।

दो के अनुपूरण में इस सबसे ऋणात्मक संख्या को कभी-कभी असामान्य संख्या कहा जाता है, क्योंकि यह एकमात्र अपवाद है।[7][8] यद्यपि संख्या अपवाद है, यह नियमित दो की अनुपूरण प्रणालियों में वैध संख्या है। अतः सभी अंकगणितीय परिचालन इसके साथ संकार्य के रूप में और (जब तक कि कोई अतिप्रवाह न हो) परिणाम के रूप में कार्य करते हैं।

यह क्यों कार्य करता है

इस प्रकार से सभी संभव N-बिट मानों के एक समूह को देखते हुए, हम निम्न (द्विआधारी मान द्वारा) अर्ध को 0 से (2N − 1 − 1) तक के पूर्णांक के रूप में निर्दिष्ट कर सकते हैं और ऊपरी अर्ध को −2N − 1 से −1 समावेशी तक के पूर्णांक के रूप में निर्दिष्ट कर सकते हैं। ऊपरी अर्ध भाग (फिर से, द्विआधारी मान द्वारा) का उपयोग−2N − 1 से −1 तक ऋणात्मक पूर्णांकों को दर्शाने के लिए किया जा सकता है, क्योंकि, अतिरिक्त मॉड्यूलो 2N के अंतर्गत वे उन ऋणात्मक पूर्णांकों के समान ही व्यवहार करते हैं। कहने का तात्पर्य यह है कि क्योंकि i + j mod 2N = i + (j + 2N) mod 2N समूह में कोई भी मान { j + k 2N | k एक पूर्णांक है }  का उपयोग j के स्थान पर किया जा सकता है।[9]

इस प्रकार से उदाहरण के लिए, आठ बिट के साथ, अचिन्हित बाइट 0 से 255 हैं। शीर्ष अर्ध (128 से 255) से 256 घटाने पर चिन्हित बाइट -128 से -1 प्राप्त होते हैं।

अतः दो के अनुपूरण के संबंध का एहसास इस बात पर ध्यान देने से होता है कि 256 = 255 + 1, और (255 − x) x का इकाई का अनुपूरण है।

ध्यान देने योग्य कुछ विशेष संख्याएँ
दशमलव द्विआधारी
127  0111 1111
64  0100 0000
1 0000 0001
0 0000 0000
−1  1111 1111
−64  1100 0000
−127  1000 0001
−128  1000 0000

उदाहरण

इस प्रकार से इस उपधारा में, दशमलव संख्याओं के साथ दशमलव बिंदु जोड़ा जाता है।

इस प्रकार से उदाहरण के लिए, 8 बिट संख्या मात्र -128 से 127. प्रत्येक पूर्णांक का प्रतिनिधित्व कर सकती है, समावेशी, चूँकि (28 − 1 = 128.). −95. modulo 256. 161 के बराबर है

−95। +256।
= −95। + 255। + 1
= 255। − 95। + 1
= 160। + 1।
=161।

<पूर्व शैली=चौड़ाई:25em >

 1111 1111 255।
− 0101 1111 − 95।

अंकगणितीय संक्रियाएं

जोड़

दो की अनुपूरण संख्याओं को जोड़ने के लिए किसी विशेष प्रसंस्करण की आवश्यकता नहीं होती है, यद्यपि संकार्य में विपरीत चिह्न हों; परिणाम का चिह्न स्वचालित रूप से निर्धारित होता है। इस प्रकार से उदाहरण के लिए, 15 और −5 जोड़ने पर:

<पूर्व शैली=चौड़ाई:25em >

 0000 1111 (15)
+ 1111 1011 (−5)

घटाव

कंप्यूटर सामान्यतः घटाव को लागू करने के लिए अनुपूरण की विधि का उपयोग करते हैं। घटाव के लिए अनुपूरणों का उपयोग करना ऋणात्मक संख्याओं का प्रतिनिधित्व करने के लिए अनुपूरणों का उपयोग करने से निकटता से संबंधित है, क्योंकि संयोजन संकार्य और परिणामों के सभी संकेतों की अनुमति देता है; प्रत्यक्ष घटाव दो-अनुपूरण संख्याओं के साथ भी कार्य करता है। योग के जैसे, दो के अनुपूरण का उपयोग करने का लाभ यह निर्धारित करने के लिए संकार्य के संकेतों की जांच करने का उन्मूलन है कि योग या घटाव की आवश्यकता है या नहीं। इस प्रकार से उदाहरण के लिए, 15 में से −5 घटाना वस्तुतः 5 से 15 जोड़ना है, परन्तु यह दो-अनुपूरण प्रतिनिधित्व द्वारा छिपा हुआ है:

<पूर्व शैली=चौड़ाई:25em >

 11110 000 (carry)
 0000 1111 (15)
− 1111 1011 (−5)

गुणा

इस प्रकार से दो N-बिट संख्याओं के गुणनफल को सभी संभावित मानों को समाहित करने के लिए 2N बिट की आवश्यकता होती है।[10]

यदि दो के अनुपूरण का उपयोग करते हुए दो संकार्य की यथार्थता गुणन से पहले दोगुनी हो जाती है, तो प्रत्यक्ष गुणन (उस यथार्थता के अतिरिक्त किसी भी अतिरिक्त बिट को छोड़कर) उचित परिणाम प्रदान करेगा।[11] इस प्रकार से उदाहरण के लिए, 6 × (−5) = −30 लें। अतः सबसे पहले, परिशुद्धता को चार बिट से आठ तक बढ़ाया जाता है। फिर आठवें बिट से आगे के बिट को हटाकर संख्याओं को गुणा किया जाता है (जैसा कि x द्वारा दिखाया गया है):

<पूर्व शैली=चौड़ाई:25em >

 00000110 (6)
* 11111011 (−5)

तुलना (क्रमण)

इस प्रकार से तुलना (कंप्यूटर प्रोग्रामिंग) को प्रायः कृत्रिम घटाव के साथ लागू किया जाता है, जहां कंप्यूटर के स्थिति रजिस्टर में फ्लैग की जांच की जाती है, परन्तु मुख्य परिणाम को अनदेखा कर दिया जाता है। शून्य फ्लैग इंगित करता है कि दो मानों की तुलना बराबर है। यदि फ्लैग पर चिन्ह और अतिप्रवाह फ्लैग का अनन्य-या 1 है, तो घटाव परिणाम शून्य से कम था, अन्यथा परिणाम शून्य या अधिक था। अतः ये जाँचें प्रायः सप्रतिबन्ध शाखा निर्देशों में कंप्यूटर में लागू की जाती हैं।

अचिन्हित द्विआधारी संख्याओं को सरल शब्दकोषीय क्रम द्वारा क्रमबद्ध किया जा सकता है, जहां बिट मान 0 को बिट मान 1 से कम के रूप में परिभाषित किया गया है। दो के अनुपूरण मानों के लिए, सबसे महत्वपूर्ण बिट का अर्थ व्युत्क्रमित है (अर्थात 1, 0 से कम है)।

इस प्रकार से निम्नलिखित एल्गोरिदम (एक n-बिट दो के अनुपूरण संरचना के लिए) परिणाम रजिस्टर R को −1 पर समूह करता है यदि A < B, +1 पर यदि A > B, और 0 पर यदि A और B बराबर हैं:

// reversed comparison of the sign bit

if A(n-1) == 0 and B(n-1) == 1 then
    return +1
else if A(n-1) == 1 and B(n-1) == 0 then
    return -1
end
 
// comparison of remaining bits

for i = n-2...0 do
    if A(i) == 0 and B(i) == 1 then
        return -1
    else if A(i) == 1 and B(i) == 0 then
        return +1 
    end
end
 
return 0

दो की अनुपूरण संख्याएँ और 2-एडिक संख्याएँ

इस प्रकार से 1972 में एमआईटी एआई लैब द्वारा प्रकाशित क्लासिक हकमेम में, बिल गोस्पर ने उल्लेख किया कि किसी मशीन का आंतरिक प्रतिनिधित्व दो-अनुपूरण था या नहीं, यह दो की क्रमिक घातों को जोड़कर निर्धारित किया जा सकता है। अतः कल्पना की उड़ान में, उन्होंने नोट किया कि बीजगणितीय रूप से ऐसा करने के परिणाम से संकेत मिलता है कि बीजगणित मशीन (ब्रह्मांड) पर चलाया जाता है जो दो का अनुपूरण है।[12]

गोस्पर के अंतिम निष्कर्ष को आवश्यक नहीं कि गंभीरता से लिया जाए, और यह गणितीय परिहास के समान है। महत्वपूर्ण चरण है ...110 = ...111 - 1, अर्थात, 2X = X - 1, और इस प्रकार X = ...111 = -1। यह ऐसी विधि की परिकल्पना करता है जिसके द्वारा 1s की अनंत स्ट्रिंग को संख्या माना जाता है, जिसके लिए प्रारंभिक अंकगणित में परिमित स्थान-मान अवधारणाओं के विस्तार की आवश्यकता होती है। इस प्रकार से यह या तो सभी पूर्णांकों के लिए दो-अनुपूरण नोटेशन के भाग के रूप में, एक विशिष्ट 2-एडिक संख्या के रूप में, या यहां तक ​​कि वास्तविक संख्याओं 1 + 2 + 4 + 8 + ··· की भिन्न श्रृंखला के लिए परिभाषित सामान्यीकृत योगों में से एक के रूप में भी सार्थक है।[13] अतः डिजिटल अंकगणित परिपथ, अनंत (2 की धनात्मक घातों तक विस्तारित) बिट स्ट्रिंग के साथ संचालित करने के लिए आदर्श, दो-एडिक योग और दो के अनुपूरण प्रतिनिधित्व के साथ संगत गुणन उत्पन्न करते हैं।[14] 2-एडिक मिति समष्टि में द्विआधारी अंकगणितीय और बिटवाइज़ संचालन के निरंतर कार्य का क्रिप्टोग्राफी में भी कुछ उपयोग होता है।[15]

भिन्न रूपांतरण

किसी संख्या को भिन्नात्मक भाग के साथ परिवर्तित करने के लिए, जैसे कि .0101, किसी को सामान्य रूपांतरण के जैसे दाएं से बाएं 1s को दशमलव में परिवर्तित करना होगा। इस प्रकार से इस उदाहरण में 0101 दशमलव में 5 के बराबर है। चल बिंदु के बाद प्रत्येक अंक अंश का प्रतिनिधित्व करता है जहां हर 2 का गुणक है। इसलिए, प्रथम 1/2 है, दूसरा 1/4 है और इसी प्रकार। जैसा कि ऊपर बताया गया है, पहले से ही दशमलव मान की गणना करने के बाद, मात्र एलएसबी (एलएसबी = दाएं से प्रारम्भ) के हर का उपयोग किया जाता है। इस रूपांतरण का अंतिम परिणाम 5/16 है।

इस प्रकार से उदाहरण के लिए, इस विधि के कार्य करने के लिए .0110 का चल मान होने पर, किसी को दाईं ओर से अंतिम 0 पर विचार नहीं करना चाहिए। अतः इसलिए, 0110 के लिए दशमलव मान की गणना करने के अतिरिक्त, हम मान 011 की गणना करते हैं, जो दशमलव में 3 है (अंत में 0 छोड़ने पर, परिणाम 6 होता, साथ में हर 24= 16, जो घटकर 3/8 हो जाता है)। हर 8 है, जो अंतिम परिणाम 3/8 देता है।

यह भी देखें

  • प्रभाग एल्गोरिदम, जिसमें दो-अनुपूरण अभ्यावेदन में विभाजन को पुनर्स्थापित करना और गैर-पुनर्स्थापित करना सम्मिलित है
  • ऑफसेट द्विआधारी
  • पी-एडिक संख्या
  • अनुपूरण की विधि, अन्य संख्या आधारों का सामान्यीकरण, यांत्रिक कैलकुलेटर पर उपयोग किया जाता है

टिप्पणियाँ

  1. For x = 0 we have 2N − 0 = 2N, which is equivalent to 0* = 0 modulo 2N (i.e. after restricting to N least significant bits).

संदर्भ

  1. E.g. "Signed integers are two's complement binary values that can be used to represent both positive and negative integer values.", Section 4.2.1 in Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture, November 2006
  2. David J. Lilja; Sachin S. Sapatnekar (2005). वेरिलॉग के साथ डिजिटल कंप्यूटर सिस्टम डिजाइन करना. Cambridge University Press.
  3. von Neumann, John (1945), First Draft of a Report on the EDVAC (PDF), retrieved February 20, 2021
  4. "Math". API specification. Java Platform SE 7.
  5. Regehr, John (2013). "Nobody expects the Spanish inquisition, or INT_MIN to be divided by -1". Regehr.org (blog).
  6. 6.0 6.1 Seacord, Robert C. (2020). "Ensure that operations on signed integers do not result in overflow". Rule INT32-C. wiki.sei.cmu.edu. SEI CERT C Coding Standard.
  7. Affeldt, Reynald & Marti, Nicolas (2006). Formal verification of arithmetic functions in SmartMIPS Assembly (PDF) (Report). Archived from the original (PDF) on 2011-07-22.
  8. Harris, David Money; Harris, Sarah L. (2007). Digital Design and Computer Architecture. p. 18 – via Google Books.
  9. "3.9. Two's Complement". Chapter 3. Data Representation. cs.uwm.edu. 2012-12-03. Archived from the original on 31 October 2013. Retrieved 2014-06-22.
  10. Bruno Paillard. An Introduction To Digital Signal Processors, Sec. 6.4.2. Génie électrique et informatique Report, Université de Sherbrooke, April 2004.
  11. Karen Miller (August 24, 2007). "Two's Complement Multiplication". cs.wisc.edu. Archived from the original on February 13, 2015. Retrieved April 13, 2015.
  12. "प्रोग्रामिंग हैक्स". HAKMEM. ITEM 154 (Gosper).
  13. For the summation of 1 + 2 + 4 + 8 + ··· without recourse to the 2-adic metric, see Hardy, G.H. (1949). Divergent Series. Clarendon Press. LCC QA295 .H29 1967. (pp. 7–10)
  14. Vuillemin, Jean (1993). सर्किट और नंबरों पर (PDF). Paris: Digital Equipment Corp. p. 19. Retrieved 2023-03-29., Chapter 7, especially 7.3 for multiplication.
  15. Anashin, Vladimir; Bogdanov, Andrey; Kizhvatov, Ilya (2007). "एबीसी स्ट्रीम सिफर". Russian State University for the Humanities. Retrieved 24 January 2012.

अग्रिम पठन

  • Koren, Israel (2002). Computer Arithmetic Algorithms. A.K. Peters. ISBN 1-56881-160-8.
  • Flores, Ivan (1963). The Logic of Computer Arithmetic. Prentice-Hall.

बाहरी संबंध