दो के पूरक के क्या फायदे हैं?


11

कुछ एडीसी / डीएसी उपकरणों में उनके डेटा को 2 के पूरक रूप में आउटपुट / इनपुट करने के विकल्प हैं।

दो के पूरक रूप में डिजिटल डेटा का प्रतिनिधित्व करने के क्या फायदे हैं जब आप बस सीधे बाइनरी कोड रख सकते हैं और रूपांतरण का समय बचा सकते हैं?


4
दो के तारीफ है एक सीधी बाइनरी कोड ...
राँभना बतख

"बीजगणित एक मशीन (ब्रह्माण्ड) पर चलाया जाता है जो दो-पूरक है" - HAKMEM 154 ( inwap.com/pdp10/hbaker/hakmem/hacks.html )
ChrisInEdmonton

2
दो के पूरक में 5 क्या है? 101. सीधे बाइनरी कोड में 5 क्या है? 101. दो के पूरक में -5 क्या है? 1 ... 11,111,011। सीधे बाइनरी कोड में -5 क्या है? उह ...
user253751

ऐसा लगता है कि नकारात्मक आउटपुट के साथ एडीसी होने के लिए एक दुर्लभ विशेष मामला है? इसका मतलब यह भी है कि मापा वोल्टेज वोल्टेज कम संदर्भ से कम है? और आप ऐसे ADC का निर्माण कैसे करेंगे? एक नकारात्मक भार वाले कैप के साथ क्रमिक सन्निकटन ...?
लुंडिन

ध्यान दें कि दो अलग-अलग शब्द हैं, तारीफ और शिकायत । यहां विषय दो की तारीफ है , भले ही वे दोहे बहुत विनम्र हों और अक्सर आपके बारे में अच्छी बातें कहते हों।
पीट बेकर

जवाबों:


11

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

हालांकि इसका मतलब यह नहीं है कि यह आपके दृष्टिकोण से आसान है, इस डेटा के उपभोक्ता के रूप में, यह डिवाइस के डिज़ाइन प्रयास और जटिलता को कम करता है, इस प्रकार संभवतः इसे सस्ता बनाता है।


1
फ़्लिपिंग बिट्स तो 1 जोड़ने के लिए नकारात्मक, नहीं ??
स्कॉट सीडमैन

2
@ScottSeidman हाँ, क्षमा करें, मैं उस बिट को भूल गया। ठीक करने के लिए संपादित :) :)
बहुपद

1
वास्तव में, अधिकतम pickiness के लिए, प्रोसेसर के आधार पर इसे लेने के लिए एक एकल चक्र हो सकता है x = x * -1, या एक्स - = 0 एक्स , बनाम के लिए कम से कम दो चक्र एक्स = ~ x + 1
Markt

@ चिह्न हां, लेकिन यदि आप केवल एक न्यूनतम डिवाइस (यानी पूर्ण प्रोसेसर नहीं) को लागू कर रहे हैं तो यह सिलिकॉन की जटिलता को कम से कम करने के लिए समझ में आता है।
बहुपद

5
+1 इसके अलावा, दो के पूरक ही (जैसे किसी के पूरक या संकेत बिट के रूप में) 0. दूसरों के लिए एक एकल महत्व है दो होने अंत
sbell

5

ADC डेटा को परिवर्तित कर सकता है (0 और 5V के बीच इनपुट वोल्टेज कहिए) और आपको या तो उस डेटा को अहस्ताक्षरित (0V = 0, 5V = अधिकतम कोड) या हस्ताक्षरित (2.5V = 0, 0V = max -ve, 5V = अधिकतम) की आवश्यकता होगी + ve)।

हस्ताक्षरित डेटा के लिए कंप्यूटर के सामान्य प्रतिनिधित्व के 2 के पूरक के अलावा, ऊपर वर्णित दो प्रारूपों के बीच रूपांतरण पूरी तरह से तुच्छ है: एमएसबी को उल्टा करना!

यह ADC के आंतरिक तर्क को जोड़ने के लिए अविश्वसनीय रूप से सस्ता है और ADC को डेटशीट पर एक अन्य विक्रय बिंदु देता है ...


बस एक टिप्पणी के रूप में दो पूरक और ऑफसेट बाइनरी के बीच एमएसबी स्विच जोड़ा गया
स्कॉट सीडमैन

3

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


1

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

उस रास्ते से, 2 के पूरक और सीधे बाइनरी के बीच का विकल्प ज्यादातर यह बताता है कि आपके ट्रांसड्यूसर कैसे काम करते हैं और आप अपने डेटा को कैसे संसाधित करना चाहते हैं।

सीधे बाइनरी मोड में, एडीसी आपको एक संख्या दे रहा है जो मापा गया एनालॉग मात्रा के परिमाण (लगभग हमेशा वोल्टेज) और पूर्ण पैमाने पर संदर्भ मात्रा के बीच के अनुपात का प्रतिनिधित्व करता है। उदाहरण के लिए, 10-बिट एडीसी 0 से 1023 (समावेशी) से मान लौटा सकता है। यदि आप एक वोल्टेज (कहते हैं, तो 1.25 वोल्ट) जो एडीसी के संदर्भ वोल्टेज का आधा है (जैसे, 2.50 वोल्ट), आपके द्वारा पढ़ा गया बाइनरी कोड आपके द्वारा पढ़े जाने वाले अधिकतम मूल्य का आधा होगा - इसलिए, 512, या उसके स्थान पर एडीसी में गोलाई और गैर-रैखिकता के अधीन।

उदाहरण के लिए, मान लें कि आपके पास एक ट्रांसड्यूसर है जो एक टैंक में रॉकेट ईंधन की मात्रा की रिपोर्ट करता है। 0V का मतलब है कि टैंक खाली है और 2.5V वोल्ट का मतलब है कि यह भरा हुआ है। तो आप बस अपने एडीसी से ट्रांसड्यूसर को कनेक्ट करें, और आप चले जाएं!

लेकिन ध्यान दें कि उपरोक्त पैराग्राफ में, नकारात्मक वोल्टेज को मापने का कोई तरीका नहीं है। क्या होगा यदि हम टैंक के अंदर और बाहर रॉकेट ईंधन के प्रवाह को मापना चाहते थे (और हमारे पास ऐसा करने के लिए एक ट्रांसड्यूसर था)? ADC नकारात्मक संख्याओं को माप नहीं सकता है, इसलिए हमारे पास एक समस्या है। हालांकि, 2 के पूरक मोड का उपयोग करके इसे नकली करने का एक आसान तरीका है: इस मामले में, ट्रांसड्यूसर आउटपुट फिर से पक्षपाती है ताकि एडीसी के दो संदर्भ वोल्टेज के बीच शून्य बिंदु आधा हो जाए। दूसरे शब्दों में, सकारात्मक प्रवाह 1.25V और 2.50V के बीच वोल्टेज द्वारा दर्शाए जाते हैं, और नकारात्मक प्रवाह 1.25V से 0V तक दर्शाए जाते हैं - इसलिए टैंक में बहने वाले ADC को 512 से 1023 तक का कोड देगा और धन्यवाद से बहेगा। 511 से 0 के कोड (सीधे द्विआधारी प्रारूप में)।

अब यह बहुत ही असुविधाजनक है। हमें इसके साथ कुछ भी करने से पहले प्रत्येक माप से 512 को घटाना होगा, जो -512 से +511 की सीमा में नंबर देता है। 2 के पूरक मोड की बात यह है कि यह आपके लिए ऐसा करता है!

हालाँकि, आप अभी भी एक ट्रांसड्यूसर के साथ सीधे बाइनरी का उपयोग करना चाह सकते हैं जो हस्ताक्षरित परिणाम उत्पन्न करता है। उदाहरण के लिए, आपके ट्रांसड्यूसर में विभेदक आउटपुट हो सकते हैं: इस मामले में आप उल्टे आउटपुट को गैर-उल्टे आउटपुट से वैसे भी घटाना चाहेंगे, इसलिए 2 के पूरक का उपयोग करने का कोई फायदा नहीं है।


1

दो के पूरक प्रणाली उपयोग में है, क्योंकि यह उपजी है कि कैसे सरल हार्डवेयर स्वाभाविक रूप से संचालित होता है। उदाहरण के लिए सोचें कि आप कार का ओडोमीटर, जिसे आपने शून्य पर रीसेट किया है। फिर गियर को रिवर्स पर रखें, और 1 मील के लिए पीछे की ओर ड्राइव करें (कृपया वास्तविकता में ऐसा न करें)। आपका ओडोमीटर (यदि यह यांत्रिक है) 0000 से 9999 तक रोल करेगा। दोनों का पूरक सिस्टम समान व्यवहार करता है।

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


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

और हां, मेरे निसान का ओडोमीटर इस तरह से काम करता है।


आपका जवाब अतिप्रवाह (और अंतर्प्रवाह) के बारे में है, लेकिन चूंकि ओडोमीटर नकारात्मक संख्याओं को प्रदर्शित नहीं करता है, इसलिए यह दो के पूरक-संबंधित कुछ को संबोधित नहीं करता है ...
Marcelm

@marcelm, वास्तव में, ओडोमीटर का उदाहरण दोहों के पूरक की व्याख्या करता है । यह सिर्फ इतना है कि पीकेपी स्पष्टीकरण के साथ बहुत दूर नहीं गया। यदि छह अंकों का ओडोमीटर शून्य पढ़ता है, और आप एक मील के लिए रिवर्स ड्राइव करते हैं, तो आप इसे -1 पढ़ने की उम्मीद करेंगे। इसके बजाय, यह 999999 पढ़ता है। ऐसा इसलिए है क्योंकि 999999 छह अंकों का है, दसियों का प्रतिनिधित्व करता है -1।
सोलोमन स्लो

@jameslarge नहीं, यह अभी भी नहीं है। उत्तर में ऐसा कुछ नहीं है जो वास्तव में दो के पूरक को छूता है। या किसी के पूरक, या संकेत-परिमाण, या कोई हस्ताक्षरित संख्या प्रतिनिधित्व।
14

@marcelm हाँ वहाँ है: दो की पूरक प्रणाली का बहुत मूल विचार: शून्य शून्य एक अधिकतम प्रतिनिधित्व योग्य अहस्ताक्षरित बराबर है। यह दो के पूरक प्रणाली का विचार है। कोई अन्य हस्ताक्षरित संख्या प्रतिनिधित्व यह (मेरी जानकारी के लिए) प्रदान नहीं करता है। और ओडोमीटर उदाहरण से पता चलता है कि इंजीनियरिंग की सादगी से यह व्यवहारिक संपत्ति कितनी आसानी से आती है; ओडोमीटर के मामले में: मैकेनिकल इंजीनियरिंग से। यांत्रिक और इलेक्ट्रॉनिक दोनों दुनिया में, यह (दो का पूरक प्रणाली) इसे काम करने का सबसे सरल तरीका है।
पीकेपी

0

दूसरों ने पहले ही जवाब दिया है कि क्यों द्विआधारी तारीफ बाइनरी कंप्यूटर हार्डवेयर के लिए सुविधाजनक है। हालांकि, आप पूछ रहे हैं कि ए / डी "सीधे बाइनरी" (जो भी आपको लगता है कि वास्तव में इसका मतलब है) के बजाए ट्वीस तारीफ का उत्पादन करेगा।

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

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

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

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

मुझे 100 माइक्रोकंट्रोलर परियोजनाओं में एक भी मामला याद नहीं आ रहा है, जहाँ मैंने ए / डी का उपयोग कुछ भी नहीं किया है, लेकिन अहस्ताक्षरित आउटपुट प्रारूप में।

तो इस सवाल का जवाब देने के लिए कि ए / डी आउटपुटिंग "ट्वोस तारीफ" के क्या फायदे हैं, दो जवाब हैं:

  1. वे सभी वैसे भी करते हैं, बस इतना है कि ये मूल्य गैर-नकारात्मक हैं, इसलिए आप साइन की भयावहता जैसे जुड़वा प्रशंसा और अन्य नोटेशन के बीच अंतर नहीं बता सकते हैं।

  2. फायदे बहुत मामूली हैं। एक माइक्रोकंट्रोलर के अंदर वे अनिवार्य रूप से अस्तित्वहीन हैं।

    समर्पित हार्डवेयर में, नकारात्मक इनपुट वोल्टेज का संकेत देने वाले नकारात्मक मानों के लिए कुछ लाभ हो सकते हैं, इस मामले में मानों की श्रेणी से निपटने के लिए twos तारीफ सबसे आसान तरीका है। ध्यान दें कि यदि इनपुट वोल्टेज रेंज 0 के बारे में सममित नहीं है, तो यह लाभ चला जाता है।


-1

यह 'स्ट्रेट बाइनरी कोड' क्या है? मेरा मानना ​​है कि आपके पास एक संकेत बिट है जो नकारात्मक के लिए '1' और सकारात्मक (या इसके विपरीत ) के लिए '0' है । यह दो से अधिक नुकसान है टोमोस पूरक जो अभी तक उल्लेख नहीं किया गया है: एक बड़े पैमाने पर अप्रासंगिक इन दिनों और एक महत्वपूर्ण।

बड़े पैमाने पर अप्रासंगिक एक यह है कि आप एक कम संख्या का प्रतिनिधित्व कर सकते हैं - यानी 8 बिट्स में 255 नंबर। जब आप 32 या 64 बिट प्राप्त करते हैं तो यह बहुत ही अप्रासंगिक है, लेकिन जब आपके पास काम करने के लिए कुछ 4 या 6 बिट्स होते हैं तो यह महत्वपूर्ण होता है।

अधिक महत्वपूर्ण यह है कि अब एक ही संख्या का प्रतिनिधित्व करने के दो तरीके हैं - विशेष रूप से, 0 - +0 और -0, लेकिन +0 और -0 समान संख्या हैं, इसलिए आपके कार्यान्वयन को यह सुनिश्चित करने की आवश्यकता है कि आप इनकी तुलना नहीं कर रहे हैं हर बार जब आप एक समानता की जाँच करते हैं।


मुझे लगता है कि आप यहां से ट्रैक कर रहे हैं। आप साइन-परिमाण प्रतिनिधित्व के बारे में बात कर रहे हैं जब ओपी स्पष्ट रूप से एक अहस्ताक्षरित बाइनरी प्रतिनिधित्व के बारे में बात कर रहा था।
जो हस

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