"2 का पूरक" क्या है?


434

मैं एक कंप्यूटर सिस्टम पाठ्यक्रम में हूँ और दो के पूरक के साथ भाग में, संघर्ष कर रहा हूँ । मैं इसे समझना चाहता हूं लेकिन मैंने जो कुछ भी पढ़ा है वह मेरे लिए एक साथ तस्वीर नहीं लाया है। मैंने अपनी पाठ्य पुस्तक सहित विकिपीडिया लेख और विभिन्न अन्य लेख पढ़े हैं ।

इसलिए, मैं इस समुदाय विकी पोस्ट को शुरू करना चाहता हूं ताकि यह परिभाषित किया जा सके कि दो का पूरक क्या है, इसका उपयोग कैसे करना है और यह कैसे (जैसे हस्ताक्षर किए गए बिना और इसके विपरीत), बिट-वार संचालन और बिट-शिफ्ट ऑपरेशन जैसे नंबरों के संचालन के दौरान संख्याओं को प्रभावित कर सकता है। ।

मैं जिस चीज की उम्मीद कर रहा हूं वह स्पष्ट और संक्षिप्त परिभाषा है जिसे आसानी से एक प्रोग्रामर द्वारा समझा जाता है।

जवाबों:


627

दो के पूरक पूर्णांक को संग्रहीत करने का एक चतुर तरीका है ताकि सामान्य गणित की समस्याएं लागू करने के लिए बहुत सरल हों।

समझने के लिए, आपको बाइनरी में संख्याओं के बारे में सोचना होगा।

यह मूल रूप से कहता है,

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

आइए इसे 4 बिट्स के एक मिनी-बाइट के साथ आज़माएं (हम इसे कुतरना कहेंगे - 1/2 बाइट)।

  • 0000 - शून्य
  • 0001 - एक
  • 0010 - दो
  • 0011 - तीन
  • 0100से 0111- चार से सात

जहाँ तक हम सकारात्मकता में जा सकते हैं। 2 3 -1 = 7।

नकारात्मक के लिए:

  • 1111 - नकारात्मक एक
  • 1110 - नकारात्मक दो
  • 1101 - नकारात्मक तीन
  • 1100से 1000- नकारात्मक चार से नकारात्मक आठ

ध्यान दें कि आप नकारात्मक ( 1000= -8) के लिए एक अतिरिक्त मूल्य प्राप्त करते हैं जो आप सकारात्मकता के लिए नहीं करते हैं। ऐसा इसलिए है क्योंकि 0000इसका उपयोग शून्य के लिए किया जाता है। इसे कंप्यूटर की नंबर लाइन माना जा सकता है ।

सकारात्मक और नकारात्मक संख्याओं के बीच भेद करना

ऐसा करने से, पहले बिट को "साइन" बिट की भूमिका मिलती है, क्योंकि इसका उपयोग नॉनगेटिव और नकारात्मक दशमलव मानों के बीच अंतर करने के लिए किया जा सकता है। यदि सबसे महत्वपूर्ण बिट है 1, तो बाइनरी को नकारात्मक कहा जा सकता है, जैसे कि यदि सबसे महत्वपूर्ण बिट (सबसे बाईं ओर) है 0, तो आप कह सकते हैं कि दशमलव मान nonnegative है।

"एक का पूरक" नकारात्मक संख्याएं केवल साइन बिट को फ़्लिप करती हैं, फिर 0. से गिना जाता है। लेकिन इस दृष्टिकोण को 1000"नकारात्मक शून्य" के रूप में व्याख्या करने से निपटना है जो भ्रमित है। हार्डवेयर के करीब काम करते समय आपको आमतौर पर केवल इस बारे में चिंता करना पड़ता है।


146
संभवतः दो के पूरक का सबसे अच्छा हिस्सा यह है कि यह गणित को कैसे सरल बनाता है। 2 (0010) और -2 (1110) को एक साथ जोड़ने का प्रयास करें और आपको 10000 मिलते हैं। सबसे महत्वपूर्ण बिट अतिप्रवाह है, इसलिए परिणाम वास्तव में 0000 है। लगभग जादू की तरह, 2 + -2 = 0.
Naaff

96
आसान जोड़ और घटाव के अलावा एक और लाभ यह है कि 2 एस पूरक केवल एक शून्य है। यदि आप एक सरल साइन बिट का उपयोग कर रहे थे, तो +1 का प्रतिनिधित्व करने के लिए +1 और 1001 का प्रतिनिधित्व करने के लिए 0001 का उपयोग करें, आपके पास दो शून्य होंगे: 0000 ("+0") और 1000 ("-0")। इसके पीछे असली दर्द है।
जोर्ग डब्ल्यू मित्तग

26
इस बिंदु पर जाने के लिए और यह भी समझाने के लिए कि नकारात्मक मानों की सकारात्मकता बड़ी क्यों है। मैं रेंज अंतर के कारण की तलाश में आया था।
आश्विन

2
क्या आपको "नकारात्मक पूर्णांक के लिए" नहीं कहना चाहिए, बिल्कुल वैसा ही करें लेकिन नीचे की गिनती करें और 0 और 1 की भूमिका को स्विच करें
कोरे तुगाये

1
बिट्स को नकारात्मक पूर्णांक में बदलने के अतिरिक्त .Added अतिरिक्त भाग।
सूरज जैन

339

मुझे आश्चर्य है कि अगर इसे विकिपीडिया लेख से बेहतर बताया जा सकता है।

मूल समस्या जिसे आप दो के पूरक प्रतिनिधित्व के साथ हल करने की कोशिश कर रहे हैं, वह है नकारात्मक पूर्णांक के भंडारण की समस्या।

पहले 4 बिट्स में संग्रहीत एक अहस्ताक्षरित पूर्णांक पर विचार करें। आपके पास निम्नलिखित हो सकते हैं

0000 = 0
0001 = 1
0010 = 2
...
1111 = 15

ये अहस्ताक्षरित हैं क्योंकि इस बात का कोई संकेत नहीं है कि वे नकारात्मक हैं या सकारात्मक।

साइन मैग्निट्यूड और एक्सटेंस नोटेशन

नकारात्मक संख्याओं को संग्रहीत करने के लिए आप कई चीजों की कोशिश कर सकते हैं। सबसे पहले, आप साइन परिमाण संकेतन का उपयोग कर सकते हैं जो पहले बिट को संकेत बिट के रूप में +/- और शेष बिट्स को परिमाण का प्रतिनिधित्व करने के लिए असाइन करता है। तो फिर से 4 बिट्स का उपयोग करना और यह मान लेना कि 1 का मतलब है - और 0 का मतलब + फिर आपके पास है

0000 = +0
0001 = +1
0010 = +2
...
1000 = -0
1001 = -1
1111 = -7

तो, आप वहाँ समस्या देखते हैं? हमारे पास सकारात्मक और नकारात्मक है 0. बड़ी समस्या द्विआधारी संख्याओं को जोड़ना और घटाना है। साइन परिमाण का उपयोग करके जोड़ना और घटाना सर्किट बहुत जटिल होगा।

क्या है

0010
1001 +
----

?

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

तो साथ में दो का पूरक आता है। अब आप सकारात्मक और नकारात्मक पूर्णांक स्टोर कर सकते हैं और सापेक्ष आसानी से अंकगणित कर सकते हैं। किसी संख्या को दो के पूरक में बदलने के कई तरीके हैं। यहां एक है।

दशमलव को दो के पूरक में बदलें

  1. संख्या को बाइनरी में परिवर्तित करें (अभी के लिए चिह्न को अनदेखा करें) जैसे 5 0101 है और -5 0101 है

  2. यदि संख्या एक सकारात्मक संख्या है तो आप कर रहे हैं। उदाहरण के लिए बाइव्स ट्विन सप्लीमेंट नोटेशन का उपयोग कर बाइनरी में 0101 है।

  3. यदि संख्या ऋणात्मक है

    ३.१ पूरक ढूंढते हैं (० का उल्टा है और १ का) जैसे ०५ है ०१०१ है इसलिए पूरक का पता लगाना १०१० है

    ३.२ पूरक में १ जोड़ें १०१० + १ = १०११। इसलिए, दो के पूरक में ५१०१ है।

तो, अगर आप बाइनरी में 2 + (-3) करना चाहते हैं तो क्या होगा? 2 + (-3) -1 है। यदि आप इन संख्याओं को जोड़ने के लिए साइन परिमाण का उपयोग कर रहे हैं तो आपको क्या करना होगा? 0010 + 1101 =?

दो के पूरक का उपयोग करके विचार करें कि यह कितना आसान होगा।

 2  =  0010
 -3 =  1101 +
 -------------
 -1 =  1111

दशमलव के लिए दो के कार्यान्वयन को परिवर्तित करना

1111 को दशमलव में परिवर्तित करना:

  1. संख्या 1 से शुरू होती है, इसलिए यह नकारात्मक है, इसलिए हम 1111 का पूरक पाते हैं, जो 0000 है।

  2. 1 से 0000 जोड़ें, और हम 0001 प्राप्त करते हैं।

  3. 0001 को दशमलव में बदलें, जो 1 है।

  4. चिन्ह = -1 लगाओ।

टाडा!


45
मेरी राय में सबसे अच्छा जवाब।
कोरे तुगाई

5
हां, यह बहुत सरल है और इस मामले को बहुत अच्छा बताता है
मैक्स कोर्सेटस्की

3
मुझे समझ में नहीं आता है कि दोनों तरीकों को परिवर्तित करते समय एक को जोड़ने से हमेशा एक ही संख्या होती है। मेरे दिमाग में आप चरणों को उलट देंगे, या एक या कुछ को घटा देंगे।
मार्कोस परेरा

2
पूरक में 1 क्यों जोड़ें?
ज़िनन ज़िंग

4
इस उत्तर का उपयोग विकिपीडिया पर किया जाना चाहिए।
हिरोकी

119

अधिकांश स्पष्टीकरणों की तरह, जो मैंने देखा है, 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 हर जगह। संबंधित सकारात्मक संख्या बिट्स की संख्या में फिट नहीं होगी।

इस संख्या के बारे में और भी अजीब बात यह है कि यदि आप किसी एक को पूरक और जोड़कर उसका सकारात्मक बनाने की कोशिश करते हैं, तो आपको वही नकारात्मक संख्या वापस मिल जाती है। ऐसा लगता है कि शून्य ऐसा करेगा, लेकिन यह अप्रत्याशित है और हमारे द्वारा उपयोग किए जाने वाले सभी व्यवहारों पर नहीं क्योंकि कंप्यूटर एक तरफ, हम आम तौर पर अंकों की असीमित आपूर्ति के बारे में सोचते हैं, न कि यह निश्चित लंबाई के अंकगणित।

यह विषमताओं के हिमखंड की नोक की तरह है। सतह के नीचे प्रतीक्षा में अधिक झूठ है, लेकिन इस चर्चा के लिए पर्याप्त है। यदि आप निश्चित बिंदु अंकगणित के लिए "अतिप्रवाह" पर शोध करते हैं, तो आप शायद अधिक पा सकते हैं। यदि आप वास्तव में इसे प्राप्त करना चाहते हैं, तो आप "मॉड्यूलर अंकगणित" पर भी शोध कर सकते हैं।


1
मुझे यह उत्तर पसंद है! बताते हैं कि कैसे 2s पूरक लेते हैं और एक काम को जोड़ते हैं।
एसजे।

मुझे यह उत्तर पसंद है। विशेष रूप से जहां आप दिखाते हैं कि नकारात्मक संख्या कैसे समझी जाती है। यहाँ मुझे लगा कि पूरे नंबर को उलटा कर दिया गया है, न कि केवल एमएसबी को और फिर दूसरे भारित मूल्यों को वापस जोड़ दिया। धन्यवाद, इसने मेरे मस्तिष्क ब्लॉक को हल किया
user188757

अच्छा काम उस विषम संख्या का उल्लेख करता है जिसमें उलटा नहीं होता है। लेकिन हम इस बारे में क्या करते हैं? अगर हम किसी को उल्टा करने की कोशिश करते हैं तो क्या हम सिर्फ अतिप्रवाह का झंडा लगाते हैं?
एनएच।

जबकि अन्य उत्तर "कैसे" पर ध्यान केंद्रित करते हैं, यह उत्तर हमें "क्यों" के साथ धीरे से ले जाता है। इसने मेरी मदद की। धन्यवाद!
अभिषेक पाठक

यदि कोई संख्या 11000 ... 000 के साथ समाप्त होती है, तो यह inverting में 01000 ... 000 निकलेगी। दो-पूरक संकेतन इस विचार पर आधारित है कि बाईं ओर के सभी अंकों को बाईं ओर के प्रतिनिधित्व वाले अंक के बराबर होना चाहिए, लेकिन उस संख्या के बराबर होने पर जिसका प्रतिनिधित्व 1000 ... 000 है, वह सत्य नहीं होगा।
सुपरकैट

20

द्विआधारी के मूल्य को खोजने के लिए 2 का पूरक बहुत उपयोगी है, हालांकि मैंने इस तरह की समस्या को हल करने के बहुत अधिक संक्षिप्त तरीके के बारे में सोचा (कभी किसी और ने इसे प्रकाशित नहीं देखा):

एक बाइनरी लें, उदाहरण के लिए: 1101 जो कि [उस स्थान को "1" मान रहा है] -3 के बराबर है ।

2 के पूरक का उपयोग करते हुए हम ऐसा करेंगे ... 1101 से 0010 पर फ्लिप करें ... 0001 + 0010 ===> हमें 0011 जोड़ें। 0011 सकारात्मक बाइनरी में = 3. इसलिए 1101 = -3 !

मुझे क्या एहसास हुआ:

सभी फ़्लिपिंग और जोड़ने के बजाय, आप केवल एक सकारात्मक बाइनरी को हल करने के लिए मूल विधि कर सकते हैं (बता दें 0101) (2 3 * 0) + (2 2 * 1) + (2 1 * 0) + (2) 0 * 1) = 5।

एक नकारात्मक के साथ एक ही अवधारणा है! (एक छोटे से मोड़ के साथ)

उदाहरण के लिए 1101 लें:

2 3 * 1 = 8 के बजाय पहले नंबर के लिए , - (2 3 * 1) = -8 करें

फिर हमेशा की तरह जारी रखें, -8 + (2 2 * 1) + (2 1 * 0) + (2 0 * 1) = -3


1
सबसे अच्छा तरीका है, मैं 2 के पूरक समझ सकता हूं। इसे पढ़ने के बाद, मैं उपरोक्त प्रश्न के सभी उत्तरों को समझ सका।
शकील शहजाद

1
इस विधि का उल्लेख कंप्यूटर सिस्टम: ए प्रोग्रामर के परिप्रेक्ष्य में पुस्तक में किया गया है।
जीमो

1
यह बहुत तेज़ तरीका है!
चेंजेज़र

14

कल्पना करें कि आपके पास बिट्स / ट्रिट / अंक / जो भी हो, की परिमित संख्या है। आप 0 को सभी अंकों को 0 के रूप में परिभाषित करते हैं, और स्वाभाविक रूप से ऊपर की ओर गिनते हैं:

00
01
02
..

अंततः आप अतिप्रवाह करेंगे।

98
99
00

हमारे पास दो अंक हैं और 0 से 100 तक की सभी संख्याओं का प्रतिनिधित्व कर सकते हैं। वे सभी अंक सकारात्मक हैं! मान लीजिए कि हम नकारात्मक संख्याओं का भी प्रतिनिधित्व करना चाहते हैं?

हमारे पास वास्तव में एक चक्र है। 2 से पहले की संख्या 1. 1 से पहले की संख्या 0 है । 0 से पहले की संख्या है ... 99

तो, सादगी के लिए, मान लें कि 50 से अधिक संख्या नकारात्मक है। "49" के माध्यम से "0" 49 के माध्यम से 0 का प्रतिनिधित्व करता है। "99" -1 है, "98" -2 है, ... "50" -50 है।

यह प्रतिनिधित्व दस का पूरक है । कंप्यूटर आमतौर पर दो के पूरक का उपयोग करते हैं , जो अंकों के बजाय बिट्स का उपयोग करने के अलावा एक ही है।

दस के पूरक के बारे में अच्छी बात यह है कि इसके अलावा सिर्फ काम करता है । सकारात्मक और नकारात्मक संख्याओं को जोड़ने के लिए आपको कुछ विशेष करने की आवश्यकता नहीं है!


9

मैंने Reddit पर jng द्वारा एक शानदार विवरण पढ़ा , ओडोमीटर को एक सादृश्य के रूप में उपयोग किया।

यहां छवि विवरण दर्ज करें

यह एक उपयोगी सम्मेलन है। वही सर्किट और तर्क संचालन जो बाइनरी में सकारात्मक संख्याओं को जोड़ते / घटाते हैं, फिर भी सम्मेलन का उपयोग करते हुए सकारात्मक और नकारात्मक दोनों संख्याओं पर काम करते हैं, इसीलिए यह इतना उपयोगी और सर्वव्यापी है।

एक कार के ओडोमीटर की कल्पना करें, यह 99999 पर कहती है (यदि आप 00000 बढ़ाते हैं तो आपको 00001 मिलता है। यदि आप 00000 घटाते हैं, तो आपको 99999 मिलता है (रोल-अराउंड के कारण)। यदि आप 99999 में एक वापस जोड़ते हैं तो यह 00000 पर वापस चला जाता है। इसलिए यह तय करना उपयोगी है कि 99999 -1 का प्रतिनिधित्व करता है। इसी तरह, यह तय करना बहुत उपयोगी है कि 99998 -2 का प्रतिनिधित्व करता है, और इसी तरह। आपको कहीं रुकना होगा, और सम्मेलन द्वारा भी, संख्याओं के शीर्ष आधे को नकारात्मक (50000-99999) माना जाता है, और निचला आधा सकारात्मक सिर्फ अपने लिए (00000-49999) खड़ा होता है। नतीजतन, शीर्ष अंक 5-9 होने का मतलब है कि प्रतिनिधित्व संख्या नकारात्मक है, और यह 0-4 होने का मतलब है कि प्रतिनिधित्व सकारात्मक है - ठीक उसी तरह जैसे दो के पूरक द्विआधारी संख्या में शीर्ष बिट का प्रतिनिधित्व करने वाला संकेत।

यह समझना मेरे लिए भी कठिन था। एक बार जब मैंने इसे प्राप्त किया और किताबों के लेखों और स्पष्टीकरणों को फिर से पढ़ने के लिए वापस चला गया (तब कोई इंटरनेट वापस नहीं था), तो यह उन लोगों का एक बहुत कुछ निकला जो यह वर्णन करते थे कि वास्तव में इसे समझ नहीं आया था। मैंने उसके बाद एक किताब पढ़ाने वाली असेंबली लैंग्वेज लिखी थी (जो 10 साल तक खूब बिकी थी)।


5

दिए गए नंबर के 1'st पूरक के साथ दो पूरक पाए जाते हैं। हम कहते हैं कि हमें इसके पूरक होने का पता लगाना है, 10101फिर अपने लोगों को पूरक ढूंढना है, अर्थात इस परिणाम में 01010जोड़ें , जो कि अंतिम उत्तर है।101010+1=01011


4

8 बिट्स का उपयोग कर बाइनरी फॉर्म में 10 - 12 का उत्तर दें: हम वास्तव में क्या करेंगे 10 + (-12)

हमें इसे 12 से कम करने के लिए 12 के तारीफ भाग को प्राप्त करने की आवश्यकता है। 12 से बाइनरी में 00001100 है। बाइनरी में 10 00001010 है।

12 के तारीफ वाले हिस्से को प्राप्त करने के लिए हम सभी बिट्स को उल्टा करते हैं, फिर 1. 12 को बाइनरी में उलटा 11110011 जोड़ते हैं। यह उलटा कोड (किसी का पूरक) भी है। अब हमें एक जोड़ने की जरूरत है, जो अब 11110100 है।

तो ११११०१०० १२ का गुणगान है! आसान जब आप इस तरह से सोचते हैं।

अब आप बाइनरी फॉर्म में 10 - 12 के उपरोक्त प्रश्न को हल कर सकते हैं।

00001010
11110100
-----------------
11111110  

3

2 की पूर्णता: जब हम किसी संख्या के 1 के पूरक के साथ एक अतिरिक्त जोड़ते हैं तो हमें 2 का संकलन मिलेगा। उदाहरण के लिए: 100101 यह 1 का पूरक 011010 है और 2 का पूरक 011010 + 1 = 011011 है (1 पूरक के साथ एक को जोड़कर) अधिक जानकारी के लिए इस लेख को रेखांकन के लिए समझाएं।


सर्कल के साथ एक स्पष्टीकरण के लिए
plus1

3

गणित के दृष्टिकोण से दो पूरक प्रणाली को देखना वास्तव में समझ में आता है। दस के पूरक में, विचार अनिवार्य रूप से अंतर को 'अलग' करने के लिए है।

उदाहरण: 63 - 24 = x

हम 24 के पूरक को जोड़ते हैं जो वास्तव में सिर्फ (100 - 24) है। तो वास्तव में, हम जो कर रहे हैं, वह समीकरण के दोनों किनारों पर 100 जोड़ रहा है।

अब समीकरण है: 100 + 63 - 24 = x + 100, यही कारण है कि हम 100 (या 10 या 1000 या जो भी) निकालते हैं।

शून्य की एक लंबी श्रृंखला से एक संख्या को घटाने के लिए होने वाली असुविधाजनक स्थिति के कारण, हम दशमलव प्रणाली, नौ के पूरक में 'डिमिशंड रेडिक्स पूरक' प्रणाली का उपयोग करते हैं।

जब हमें एक बड़ी श्रृंखला से निकाइन की संख्या के साथ प्रस्तुत किया जाता है, तो हमें केवल संख्याओं को उलटने की आवश्यकता होती है।

उदाहरण: 99999 - 03275 = 96724

यही कारण है कि, नौ के पूरक के बाद, हम 1 जोड़ते हैं। जैसा कि आप शायद बचपन के गणित से जानते हैं, 9 'चोरी' से 10 हो जाता है। 1. तो मूल रूप से यह सिर्फ दस का पूरक है जो अंतर से 1 लेता है।

बाइनरी में, दो का पूरक दस के पूरक के बराबर है, जबकि एक का पूरक नौ का पूरक है। प्राथमिक अंतर यह है कि हम दस (10, 100 आदि को समीकरण में जोड़कर) अंतर को अलग करने की कोशिश कर रहे हैं, हम दो की शक्तियों के साथ अंतर को अलग करने की कोशिश कर रहे हैं।

यह इस कारण से है कि हम बिट्स को उल्टा करते हैं। ठीक उसी तरह जैसे कि हमारा मिनुएड दशमलव में एक श्रृंखला है, बाइनरी में लोगों की एक श्रृंखला है।

उदाहरण: 111111 - 101001 = 010110

क्योंकि लोगों की श्रृंखला दो की एक अच्छी शक्ति से 1 नीचे है, वे दशमलव में नौ की तरह अंतर से 'चोरी' करते हैं।

जब हम नकारात्मक बाइनरी नंबर का उपयोग कर रहे हैं, तो हम वास्तव में सिर्फ यह कह रहे हैं:

0000 - 0101 = एक्स

1111 - 0101 = 1010

1111 + 0000 - 0101 = x + 1111

'अलग' करने के लिए, हमें 1 जोड़ने की आवश्यकता है क्योंकि 1111 10000 में से एक है और हम अग्रणी 1 को हटा देते हैं क्योंकि हमने इसे मूल अंतर में जोड़ा है।

1111 + 1 + 0000 - 0101 = x + 1111 + 1

10000 + 0000 - 0101 = x + 10000

बस x पाने के लिए दोनों तरफ से 10000 निकालें, यह मूल बीजगणित है।


3

अब तक के कई उत्तर स्पष्ट रूप से बताते हैं कि नकारात्मक संख्या का प्रतिनिधित्व करने के लिए दो के पूरक का उपयोग क्यों किया जाता है, लेकिन हमें यह नहीं बताएं कि दो की पूरक संख्या क्या है, विशेष रूप से क्यों नहीं एक '1' जोड़ा जाता है, और वास्तव में अक्सर गलत तरीके से जोड़ा जाता है।

भ्रम एक पूरक संख्या की परिभाषा की खराब समझ से आता है। एक पूरक वह अनुपस्थित भाग है जो कुछ पूर्ण करेगा।

मूलांक b में n अंक संख्या x का मूलांक पूरक है, परिभाषा के अनुसार, b ^ nx। बाइनरी 4 में 100 का प्रतिनिधित्व किया जाता है, जिसमें 3 अंक (एन = 3) और 2 (बी = 2) का एक मूलांक होता है। तो इसका मूलांक पूरक है b ^ nx = 2 ^ 3-4 = 8-4 = 4 (या बाइनरी में 100)।

हालांकि, द्विआधारी में एक मूलांक के पूरक प्राप्त करना उतना आसान नहीं है जितना कि इसके मंद मूलांक पूरक को प्राप्त करना, जिसे (b ^ n-1) के रूप में परिभाषित किया गया है -y, जो कि मूलांक के पूरक से सिर्फ 1 कम है। एक छोटा सा मूलांक पूरक प्राप्त करने के लिए, आप बस सभी अंकों को पलटें।

100 -> 011 (कम)

मूलांक (दो) का पूरक प्राप्त करने के लिए, हम परिभाषा को परिभाषित करते हुए, केवल 1 जोड़ते हैं।

011 +1 -> 100 (दो के पूरक)।

अब इस नई समझ के साथ, आइए विन्सेंट रामधनी द्वारा दिए गए उदाहरण पर नज़र डालें (दूसरी प्रतिक्रिया के ऊपर देखें)

/ * विंसेंट की शुरुआत

1111 को दशमलव में परिवर्तित करना:

संख्या 1 से शुरू होती है, इसलिए यह नकारात्मक है, इसलिए हम 1111 का पूरक पाते हैं, जो 0000 है। 1 से 0000 जोड़ें, और हम 0001 प्राप्त करते हैं। 0001 को दशमलव में परिवर्तित करें, जो 1. चिह्न = -1 लागू करें। टाडा!

विंसेंट का अंत * /

के रूप में समझा जाना चाहिए

संख्या 1 से शुरू होती है, इसलिए यह नकारात्मक है। तो हम जानते हैं कि यह कुछ मूल्य x का दो पूरक है। अपने दो के पूरक द्वारा दर्शाए गए x को खोजने के लिए, हमें सबसे पहले इसके 1 के पूरक को खोजने की आवश्यकता है।

दो का पूरक x: 1111 एक का पूरक x: 1111-1 -> 1110; x = 0001, (सभी अंक फ्लिप करें)

साइन लागू करें - और उत्तर = -x = -1।


3

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

                  35=035=000000035.

एक कंप्यूटर भंडारण स्थान में कोई खाली स्थान नहीं है। सभी बिट्स (बाइनरी अंक) या तो 0 या 1. होना चाहिए। कुशलता से मेमोरी नंबर का उपयोग करने के लिए 8 बिट, 16 बिट, 32 बिट, 64 बिट, 128 बिट प्रतिनिधित्व के रूप में संग्रहीत किया जा सकता है। जब एक संख्या जो 8 बिट संख्या के रूप में संग्रहीत होती है, तो उसे 16 बिट स्थान पर स्थानांतरित किया जाता है और संकेत (पूर्ण मान) समान रहना चाहिए। दोनों 1 के पूरक और 2 के पूरक प्रतिनिधित्व इसे सुविधाजनक बनाते हैं। संज्ञा के रूप में: दोनों 1 के पूरक और 2 के पूरक हस्ताक्षरित मात्राओं के द्विआधारी प्रतिनिधित्व हैं जहां सबसे महत्वपूर्ण बिट (बाईं ओर एक) साइन बिट है। 0 सकारात्मक के लिए है और 1 नकारात्मक के लिए है। 2s पूरक का मतलब नकारात्मक नहीं है। इसका अर्थ है एक हस्ताक्षरित मात्रा। दशमलव में जैसा कि परिमाण को सकारात्मक मात्रा के रूप में दर्शाया जाता है। संरचना बिट्स को संरक्षित करने के लिए साइन एक्सटेंशन का उपयोग करती है जब एक रजिस्टर [] को और अधिक बिट्स के लिए बढ़ावा दिया जाता है:

       [0101]=[00101]=[00000000000101]=5 (base 10)
       [1011]=[11011]=[11111111111011]=-5(base 10)

एक क्रिया के रूप में: 2 के पूरक का मतलब उपेक्षा करना है । इसका मतलब नकारात्मक बनाना नहीं है। इसका मतलब है अगर नकारात्मक सकारात्मक बनाते हैं; अगर सकारात्मक नकारात्मक बनाते हैं। परिमाण परम मूल्य है:

        if a >= 0 then |a| = a
        if a < 0 then |a| = -a = 2scomplement of a

यह क्षमता नकारात्मक बाइनरी घटाव का उपयोग करके नकारात्मक को जोड़ने की अनुमति देती है। a - b = a + (-b)

1 का पूरक लेने का आधिकारिक तरीका प्रत्येक अंक के लिए 1 से उसका मूल्य घटाना है।

        1'scomp(0101) = 1010.

यह व्यक्तिगत रूप से प्रत्येक बिट को फ़्लिप करने या निकालने के समान है। यह एक नकारात्मक शून्य में परिणत होता है जो अच्छी तरह से प्यार नहीं करता है इसलिए एक टी 1 के पूरक को जोड़ने से समस्या से छुटकारा मिलता है। 2s पूरक को नकारने या लेने के लिए पहले 1s पूरक लें फिर 1 जोड़ें।

        Example 1                             Example 2
         0101  --original number              1101
         1's comp  1010                       0010
         add 1     0001                       0001
         2's comp  1011  --negated number     0011

उदाहरणों में ऋणात्मक चिन्ह विस्तारित संख्याओं के साथ काम करता है।

जोड़ना:
1110 कैरी 111110 कैरी 0110 000110 1111 111111 सम 0101 योग 000101 है।

घटाकर:

    1110  Carry                      00000   Carry
     0110          is the same as     00110
    -0111                            +11001
  ----------                        ----------
sum  0101                       sum   11111

ध्यान दें कि 2 के पूरक के साथ काम करते समय, संख्या के बाईं ओर खाली स्थान सकारात्मक संख्याओं के लिए शून्य से भरा होता है लेकिन नकारात्मक संख्या के लिए ब्यूटिस से भरा होता है। कैरी को हमेशा जोड़ा जाता है और या तो 1 या 0 होना चाहिए।

चियर्स


3

2 का पूरक अनिवार्य रूप से एक द्विआधारी संख्या के योजक व्युत्क्रम के साथ आने का एक तरीका है। अपने आप से यह पूछें: द्विआधारी रूप में एक संख्या को देखते हुए, मूल संख्या में जोड़े जाने पर क्या बिट पैटर्न, परिणाम शून्य बना देगा? यदि आप इस बिट पैटर्न के साथ आ सकते हैं तो वह बिट पैटर्न मूल संख्या का -ve प्रतिनिधित्व (एडिटिव इनवर्स) है; परिभाषा के अनुसार इसके एडिटिव व्युत्क्रम में एक संख्या को जोड़ने पर हमेशा शून्य में परिणाम होना चाहिए। उदाहरण: 101 को लें, जो कि दशमलव 5 है। अब यह काम थोड़ा पैटर्न के साथ आना है, जब दिए गए बिट पैटर्न में जोड़ा जाता है (101) परिणाम शून्य होगा। ऐसा करने के लिए, 101 के दाईं ओर से शुरू करें और प्रत्येक व्यक्तिगत बिट के लिए, फिर से एक ही सवाल करें: परिणाम को शून्य बनाने के लिए मुझे "इस" बिट में क्या जोड़ना चाहिए? यह करना जारी रखें कि सामान्य कैरी ओवर को ध्यान में रखते हुए। जब हम 3 सही स्थानों के साथ किया जाता है (अंक जो प्रमुख शून्य के संबंध में मूल संख्या को परिभाषित किए बिना) अंतिम कैरी एडिटिव व्युत्क्रम के बिट पैटर्न में जाते हैं। इसके अलावा, चूँकि हम मूल संख्या में एक ही बाइट कह सकते हैं, इसलिए एडिटिव इनवर्स में अन्य सभी प्रमुख बिट्स भी 1 होने चाहिए ताकि जब कंप्यूटर नंबर और इसके एडिटिव इनवर्स का उपयोग करके "उस" स्टोरेज टाइप (चार) का उपयोग करे उस चार में परिणाम सभी शून्य होगा।

 1 1 1
 ----------
   1 0 1
 1 0 1 1 ---> additive inverse
  ---------
   0 0 0

2

मुझे लैविनियो का जवाब पसंद आया, लेकिन शिफ्टिंग बिट्स कुछ जटिलता जोड़ता है। अक्सर साइन बिट का सम्मान करते हुए या साइन बिट का सम्मान नहीं करते हुए मूविंग बिट्स का विकल्प होता है। यह संख्या के रूप में हस्ताक्षर किए जाने के बीच विकल्प है (-8 से 7 के लिए एक कुतरना, -128 से 127 बाइट्स के लिए) या पूर्ण-श्रेणी अहस्ताक्षरित संख्या (निबल्स के लिए 0 से 15, बाइट्स के लिए 0 से 255)।


2

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

तो, 2 के पूरक में यदि कोई 0x0001 है तो -1 0x1111 है, क्योंकि इसका परिणाम 0x0000 की संयुक्त राशि में होगा (1 के अतिप्रवाह के साथ)।


1

मैं कुछ हफ्ते पहले एक ही समस्या थी। मैंने विभिन्न स्रोतों से इसके बारे में ऑन-लाइन पढ़ना, टुकड़ों को एक साथ रखने की कोशिश करना और इसके बारे में खुद को लिखना सुनिश्चित करने के लिए समाप्त कर दिया कि मैंने इसे सही ढंग से समझा। हम मुख्य रूप से दो कारणों से दो के पूरक का उपयोग करते हैं:

  1. 0 के कई अभ्यावेदन से बचने के लिए
  2. अतिप्रवाह के मामले में कैरी बिट (किसी के पूरक के रूप में) पर नज़र रखने से बचने के लिए।
  3. जोड़ और घटाव जैसे सरल कार्यों को करना आसान हो जाता है।

यदि आप इस मामले में अधिक विस्तृत विवरण चाहते हैं, तो मेरे द्वारा लिखे गए लेख को यहाँ देखें । आशा है ये मदद करेगा!


1

दो का पूरक एक ऋणात्मक संख्या को व्यक्त करने के तरीके में से एक है और अधिकांश नियंत्रक और प्रोसेसर नकारात्मक संख्या को 2 के पूरक रूप में संग्रहीत करते हैं


1
यह अन्य उत्तरों द्वारा प्रदान की गई जानकारी में कुछ भी नहीं जोड़ता है।
एड्रियन मोल

0

संदर्भ: https://www.cs.cornell.edu/~tomf/notes/cps104/twos.net.html

मैं सभी बिट्स को जोड़ता हूं और 1. प्रोग्रामेटिक रूप से जोड़ता हूं:

  // in C++11
  int _powers[] = {
      1,
      2,
      4,
      8,
      16,
      32,
      64,
      128
  };

  int value=3;
  int n_bits=4;
  int twos_complement = (value ^ ( _powers[n_bits]-1)) + 1;

यहां तक ​​कि कोडांतरक भी उच्च स्तर का होगा। अतिरिक्त तर्क के एक गेट स्तर योजनाबद्ध देखने की जरूरत है। टी साइकिल के साथ। आप एल्गोरिदम सही हैं।
मैकेंज़्म

0

2 किसी दी गई संख्या का पूरक नहीं है। न के 1 पूरक के साथ 1 जोड़कर मिला। मान लीजिए, हमारे पास एक बाइनरी नंबर है: 10111001101 यह 1 का पूरक है: 01000110010 और यह 2 का पूरक होगा: 01000110011


0

किसी संख्या को पूरक करने के लिए इसमें सभी बिट्स को फ्लिप करना है। दो के पूरक के लिए, हम सभी बिट्स को फ्लिप करते हैं और एक को जोड़ते हैं।

हस्ताक्षर किए गए पूर्णांकों के लिए 2 के पूरक प्रतिनिधित्व का उपयोग करते हुए, हम सकारात्मक संख्या को इसके नकारात्मक समकक्ष और इसके विपरीत में परिवर्तित करने के लिए 2 के पूरक ऑपरेशन को लागू करते हैं। इसलिए एक उदाहरण के लिए निबल्स का उपयोग करना, 0001(1) बन जाता है 1111(-1) और सेशन को फिर से लागू करने पर वापस आ जाता है0001

शून्य पर ऑपरेशन का व्यवहार सकारात्मक और नकारात्मक शून्य की विशेष हैंडलिंग के बिना शून्य के लिए एकल प्रतिनिधित्व देने में फायदेमंद है। 0000पूरक 1111, जो जब 1 जोड़ा जाता है। से बहुत अधिक0000 , हमें एक शून्य दे रही है, बल्कि एक सकारात्मक और एक नकारात्मक एक से।

इस प्रतिनिधित्व का एक प्रमुख लाभ यह है कि अहस्ताक्षरित पूर्णांकों के लिए मानक जोड़ सर्किट उन पर लागू होने पर सही परिणाम देते हैं। उदाहरण के लिए nibbles में 1 और -1 को जोड़ना: 0001 + 1111बिट्स रजिस्टर से बाहर निकल जाते हैं, पीछे रह जाते हैं 0000

सौम्य परिचय के लिए, अद्भुत कंप्यूटरफाइल ने इस विषय पर एक वीडियो तैयार किया है ।


0

सरल शब्द 2's Complementमें कंप्यूटर मेमोरी में नकारात्मक संख्या को संग्रहीत करने का एक तरीका है। जबकि पॉजिटिव नंबर को नॉर्मल बाइनरी नंबर के रूप में स्टोर किया जाता है।

आइए इस उदाहरण पर विचार करें,

कंप्यूटर Binary Number Systemकिसी भी संख्या का प्रतिनिधित्व करने के लिए उपयोग करता है।

x = 5;

इसे इस रूप में दर्शाया गया है 0101

x = -5;

जब कंप्यूटर का सामना होता है -, तो यह गणना करता है कि यह 2 का पूरक है और इसे संग्रहीत करता है। i.e5 = 0101 और यह 2 का पूरक है1011

संख्याओं को संसाधित करने के लिए कंप्यूटर के महत्वपूर्ण नियम हैं:

  1. यदि पहला बिट है 1तो वह negativeनंबर होना चाहिए ।
  2. यदि पहले बिट को छोड़कर सभी बिट्स हैं 0तो यह एक पॉजिटिव नंबर है क्योंकि -0नंबर सिस्टम में नहीं है। ( 1000 is not -0इसके बजाय यह पॉजिटिव है 8)
  3. यदि सभी बिट्स हैं 0तो यह है 0
  4. और यह एक है positive number


-6

सबसे सरल उत्तर:

११११ + १ = (१) ००००। तो 1111 -1 होना चाहिए। फिर -1 + 1 = 0।

मेरे लिए ये सब समझना सही है।


यह प्रश्न का उत्तर प्रदान नहीं करता है। एक लेखक से स्पष्टीकरण की आलोचना करने या अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें।
कोडोर

इसका जवाब है। सबसे आसान। मेरे लिए - सबसे अच्छा।
दिमित्री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.