दो का अनुपूरण

From Vigyanwiki
Revision as of 11:25, 18 July 2023 by alpha>Akriti

दो का अनुपूरण गणितीय संक्रिया है जो धनात्मक द्विआधारी संख्या को ऋणात्मक द्विआधारी संख्या में समतुल्य ऋणात्मक मान के साथ परिवर्तित करता है, जिसमें चिह्न के रूप में महानतम स्थानीय मान के साथ सबसे महत्वपूर्ण बिट या द्विआधारी अंक का उपयोग किया जाता है। यह इंगित करने के लिए कि द्विआधारी संख्या धनात्मक है या ऋणात्मक। इसका उपयोग कंप्यूटर विज्ञान में कंप्यूटर पर सबसे सामान्य चिन्हित संख्या प्रतिनिधित्व (धनात्मक, ऋणात्मक और शून्य) पूर्णांकों (कंप्यूटर विज्ञान) और अधिक सामान्यतः, निश्चित-बिंदु अंकगणितीय मानों का प्रतिनिधित्व करने की सबसे सामान्य विधि के रूप में किया जाता है।[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 एनकोड -4, 5 एनकोड -3, 6 एनकोड -2 और 7 एनकोड -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, एलआईएनसी, पीडीपी-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 का प्रतिनिधित्व करते हैं।

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

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

एक ऋणात्मक द्विआधारी संख्या के दोनों अनुपूरण प्राप्त करने के लिए, [[अंश वाइज़ नहीं]] संक्रिया का उपयोग करके सभी बिट को उल्टा या फ़्लिप किया जाता है; फिर 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

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

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

2 से घटावएन

किसी संख्या और उसके इकाईयों के अनुपूरण का योग है N-सभी 1 बिट के साथ बिट शब्द, जो (एक अचिन्हित द्विआधारी संख्या के रूप में पढ़ा जाता है) 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 को कॉपी करें, और शेष सभी बिट को फ़्लिप करें (यदि प्रारंभिक संख्या संकेत-और-परिमाण प्रतिनिधित्व में थी तो MSB को 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_example_anchor में दिखाया गया है। यद्यपि नकारने से अपेक्षित परिणाम मिलता है −128 है +128 , का कोई प्रतिनिधित्व नहीं है +128 आठ बिट दो की अनुपूरण प्रणाली के साथ और इस प्रकार निषेध का प्रतिनिधित्व करना वस्तुतः असंभव है। ध्यान दें कि दोनों का अनुपूरण ही संख्या होने के कारण अतिप्रवाह स्थिति के रूप में पाया जाता है क्योंकि सबसे महत्वपूर्ण बिट में कैरी था परन्तु बाहर नहीं।

This phenomenon is fundamentally about the mathematics of binary numbers, not the details of the representation as two's complement.[citation needed] गणितीय रूप से, यह इस तथ्य का अनुपूरण है कि का ऋणात्मक 0 फिर से है : बिट की दी गई संख्या के लिए, k, द्विआधारी संख्या 2 की सम संख्या होती हैk, ऋणात्मक लेना द्विआधारी संख्याओं पर समूह क्रिया (गणित) (क्रम 2 के समूह (गणित) का) है, और चूंकि शून्य की कक्षा (समूह सिद्धांत) का क्रम 1 है, कम से कम अन्य संख्या की कक्षा होनी चाहिए कक्षाओं के क्रम को समूह के क्रम में जोड़ने के लिए क्रम 1। इस प्रकार ऋणात्मक लेने के तहत कुछ अन्य संख्या अपरिवर्तनीय होनी चाहिए (औपचारिक रूप से, कक्षा-स्टेबलाइज़र प्रमेय द्वारा)। ज्यामितीय रूप से, कोई भी देख सकता है k-बिट द्विआधारी संख्याएँ चक्रीय समूह के रूप में जिसे वृत्त (या ठीक से नियमित 2) के रूप में देखा जा सकता हैk-गॉन), और ऋणात्मक लेना प्रतिबिंब है, जो 2:0 और विपरीत बिंदु को विभाजित करने वाले क्रम के तत्वों को, या दृष्टिगत रूप से चरम और नादिर को ठीक करता है।

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

  • एकात्मक निषेध संचालिका किसी अशून्य संख्या का चिह्न नहीं बदल सकती। जैसे, −(−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 is an integer }  के स्थान पर प्रयोग किया जा सकता है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 (उधार)
 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-बिट दो का अनुपूरण आर्किटेक्चर) परिणाम रजिस्टर आर को −1 पर समूह करता है यदि ए < बी, +1 पर यदि ए > बी, और 0 पर यदि ए और बी बराबर हैं:

// 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 में एमआईटी एआई लैब द्वारा प्रकाशित क्लासिक HAKMEM में, बिल गोस्पर ने उल्लेख किया कि किसी मशीन का आंतरिक प्रतिनिधित्व दो-अनुपूरण था या नहीं, यह दो की क्रमिक घातयों को जोड़कर निर्धारित किया जा सकता है। कल्पना की उड़ान में, उन्होंने नोट किया कि बीजगणितीय रूप से ऐसा करने के परिणाम से संकेत मिलता है कि बीजगणित मशीन (ब्रह्मांड) पर चलाया जाता है जो दो का अनुपूरण है।[12] गोस्पर के अंतिम निष्कर्ष को जरूरी नहीं कि गंभीरता से लिया जाए, और यह गणितीय मजाक के समान है। महत्वपूर्ण कदम है ।।।110 = ।।।111 - 1 , यानी, 2एक्स = एक्स - 1, और इस प्रकार एक्स = ।।।111 = -1। यह ऐसी विधि की परिकल्पना करता है जिसके द्वारा 1s की अनंत स्ट्रिंग को संख्या माना जाता है, जिसके लिए प्रारंभिक अंकगणित में परिमित स्थान-मूल्य अवधारणाओं के विस्तार की आवश्यकता होती है। यह या तो सभी पूर्णांकों के लिए दो-अनुपूरण अंकन के भाग के रूप में, विशिष्ट पी-एडिक संख्या|2-एडिक संख्या के रूप में, या वास्तविक संख्याओं 1 + 2 + 4 की भिन्न श्रृंखला के लिए परिभाषित सामान्यीकृत योगों में से के रूप में भी सार्थक है। + 8 + …|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 छोड़ने पर, हर 2 के साथ परिणाम 6 होता)4= 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.

बाहरी संबंध