कंप्यूटर कैसे निर्धारित करता है कि एक संख्या दूसरे की तुलना में छोटी है या अधिक है?


34

यह एक बेवकूफ सवाल की तरह लग सकता है लेकिन मैं वास्तव में यह जानने के लिए उत्सुक हूं कि एक कंप्यूटर कैसे जानता है कि ? साथ ही, कंप्यूटर कैसे जानता है कि पूर्णांक का क्रम और वर्णमाला A, B, C, D, ... है? क्या यह कहीं हार्डवेयर में संग्रहीत है या ऑपरेटिंग सिस्टम इस तरह की जानकारी प्रदान करता है?1 , 2 , 3 , 4 , 5 , 1<21,2,3,4,5,


1
इस प्रश्न का संतोषजनक उत्तर देने के लिए, हमें यह जानना होगा कि रिकी स्टैम कंप्यूटर वास्तुकला के बारे में कितना जानते हैं। सवाल से यह बहुत कम लगता है, इसलिए नीचे दिए गए फैंसी जवाबों में से कोई भी उसके लिए समझ में नहीं आएगा।
रूसी बाउर

@AndrejBauer: वास्तव में, उन्होंने सवाल पूछने के बाद से लॉग ऑन नहीं किया है। शायद वह अब जानता है कि वह सभी की जरूरत है
डेव क्लार्क

जवाबों:


31

पहले आपके पूर्णांक संख्याओं को द्विआधारी संख्याओं में परिवर्तित किया जाता है। उदाहरण के लिए, पूर्णांक 2 को 0010 में बदल दिया जाता है।

CPU एक डिजिटल तुलनित्र का उपयोग करता है :

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

तुलनात्मक का उपयोग केंद्रीय प्रसंस्करण इकाइयों (सीपीयू) और माइक्रोकंट्रोलर्स में किया जाता है।

स्रोत: https://en.wikipedia.org/wiki/Digital_comparator

तुलनित्र हार्डवेयर में कुछ फाटकों का उपयोग किया जाता है (और, या, नंद, NOR, XOR, आदि)। ये द्वार बाइनरी इनपुट लेते हैं और बाइनरी में परिणाम देते हैं। आउटपुट को एक सत्य तालिका से देखा जा सकता है।

Inputs           Outputs
A   B     A>B    A=B    A<B
0   0     0       1      0
0   1     0       0      1
1   0     1       0      0
1   1     0       1      0

यहाँ 0और 1गेट के लिए इलेक्ट्रॉनिक वोल्टेज हैं।
1- कुछ थ्रेशोल्ड वोल्टेज का प्रतिनिधित्व करता है जो कुछ सकारात्मक वोल्टेज को इंगित करता है।
0- दहलीज की तुलना में नीचे वोल्टेज का प्रतिनिधित्व करता है।

उदाहरण के लिए, 5 वोल्ट पर एक तुलनित्र काम करता है (यह स्पष्टीकरण के लिए विचार करता है) तब:
3 वोल्ट से अधिक वोल्टेज के रूप में माना जा सकता है binary-1
3 वोल्ट से नीचे के वोल्टेज को माना जाता हैbinary-0

यदि एक गेट को 3.5 वोल्ट के रूप में एक इनपुट और 2 वोल्ट के रूप में एक और इनपुट मिलता है, तो वह इस पर विचार करता है, यह एक इनपुट को बाइनरी 1 और दूसरे इनपुट को बाइनरी 0 के रूप में लेता है।

1 और 0 के ये क्रम स्विचिंग सर्किट के माध्यम से बहुत तेजी से प्रदान किए जाते हैं।

दो बिट डिजिटल तुलनित्र के संचालन को एक सत्य तालिका के रूप में व्यक्त किया जा सकता है:

 Inputs                            Outputs
   A1   A0  B1  B0  A>B    A=B   A<B        
    0   0   0   0    0      1     0
    0   0   0   1    1      0     0
    0   0   1   0    1      0     0
    0   0   1   1    1      0     0
    0   1   0   0    0      0     1
    0   1   0   1    0      1     0
    0   1   1   0    1      0     0
    0   1   1   1    1      0     0
    1   0   0   0    0      0     1
    1   0   0   1    0      0     1
    1   0   1   0    0      1     0
    1   0   1   1    1      0     0
    1   1   0   0    0      0     1
    1   1   0   1    0      0     1
    1   1   1   0    0      0     1
    1   1   1   1    0      1     0

विकिपीडिया से उद्धृत करने के लिए :

उदाहरण: दो 4-बिट बाइनरी संख्याओं पर विचार करें A और B ऐसा है कि
यहाँ छवि विवरण दर्ज करें
यहाँ छवि विवरण दर्ज करें
यहाँ प्रत्येक उप-संख्या अंकों में से एक का प्रतिनिधित्व करती है।

समानता

बाइनरी संख्या ए और बी समान होगी यदि दोनों संख्याओं के महत्वपूर्ण अंकों के सभी जोड़े समान हैं, अर्थात
यहाँ छवि विवरण दर्ज करेंयहाँ छवि विवरण दर्ज करेंयहाँ छवि विवरण दर्ज करेंयहाँ छवि विवरण दर्ज करें

चूंकि संख्याएं द्विआधारी हैं, अंक या तो 0 या 1 हैं और किसी भी दो अंकों की समानता के लिए बूलियन फ़ंक्शन यहाँ छवि विवरण दर्ज करेंऔर> के यहाँ छवि विवरण दर्ज करेंरूप में व्यक्त किया जा सकता है
यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें केवल 1 है यहाँ छवि विवरण दर्ज करेंऔर यदि यहाँ छवि विवरण दर्ज करें समान हैं।

A और B की समानता के लिए, सभी यहाँ छवि विवरण दर्ज करेंचर (i = 0,1,2,3 के लिए) 1 होना चाहिए। इसलिए A और B की गुणवत्ता की स्थिति को AND के ऑपरेशन के रूप
यहाँ छवि विवरण दर्ज करें
में द्विआधारी चर (A = B) के रूप में लागू किया जा सकता है । केवल 1 है यदि दोनों संख्याओं के सभी जोड़े समान हैं।

असमानता

मैन्युअल रूप से दो बाइनरी संख्याओं की अधिकता का निर्धारण करने के लिए, हम महत्वपूर्ण अंकों के जोड़े के सापेक्ष परिमाण का निरीक्षण करते हैं, सबसे महत्वपूर्ण बिट से शुरू करते हुए, धीरे-धीरे कम महत्वपूर्ण बिट्स की ओर आगे बढ़ रहे हैं जब तक कि एक असमानता नहीं मिलती है। जब एक असमानता पाई जाती है, यदि ए की संगत बिट 1 है और बी की 0 है तो हम यह निष्कर्ष निकालते हैं कि ए> बी। इस क्रमिक तुलना को तार्किक रूप से व्यक्त किया जा सकता है:

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


2
वाह, यहाँ क्या चल रहा है?
गिल्स एसओ- बुराई को रोकना '

1
"पहले आपके पूर्णांक संख्याओं को द्विआधारी संख्याओं में परिवर्तित किया जाता है" ... गलत, पहले स्थान पर मेमोरी में केवल द्विआधारी संख्याएं हैं, इसकी सभी 1 और 0 मशीन स्तर में है, इसलिए "रूपांतरण" नहीं है, 2 है शुरू से अंत तक 10 के रूप में प्रतिनिधित्व किया।
डॉ

अन्य स्रोतों से सामग्री की प्रतिलिपि बनाते समय, आपको अपने स्रोतों के लिए उचित गति प्रदान करनी चाहिए। यहाँ और यहाँ देखें ।
डीडब्ल्यू

दो बिट डिजिटल तुलनित्र तालिका गलत है। ijesi.org/papers/Vol(2)1%20(version%202)/C211324.pdf जब A1, A0 दोनों शून्य हैं, लेकिन B0 और B1 0 हैं, तो 1 A> B 0 होगा, उदाहरण के लिए।
user1455116

14

यह सिर्फ "पता" नहीं है, यह हर बार जांचता है। मूल रूप से, यह वही काम करता है जो आप करेंगे: तुलना करने के लिए, यह जांचता है (बाएं से) कि किस संख्या में पहला अंक है जो अन्य संख्या में संबंधित एक से बड़ा है। बेशक आपको छोटी संख्या में अग्रणी शून्य जोड़ना होगा।

कंप्यूटर के लिए अक्षर सिर्फ नंबर हैं। मनुष्य ने संख्याओं को, जैसे ASCII या यूनिकोड को अक्षरों को सौंपा है, ताकि संख्या की तुलना अक्षरों के लिए "सही" क्रम दे।


इसके अलावा, इसे आमतौर पर " लेक्सिकोग्राफिक ऑर्डर " कहा जाता है । हम आमतौर पर इसे पहले क्रम से लंबाई (सबसे कम से कम से कम) के रूप में सोच सकते हैं, फिर वर्णानुक्रम में।
usul

@usul जो मुझे याद दिलाता है कि पूर्णांक की तुलना करने का विवरण स्पष्ट रूप से विशेष एन्कोडिंग पर निर्भर करता है; मैं जो वर्णन करता हूं वह "भोले" बाइनरी नंबर के लिए काम करता है जो वास्तविक सीपीयू के उपयोग से दूर हो सकता है।
राफेल

हाँ, बिल्कुल। मैं बहुत हाल ही में ट्यूरिंग मशीनों के बारे में सोच रहा था :)। असली मशीनें काफी फिट नहीं हैं जो हमने यहां हर समय कहा है ....
usul

9

यह ऑपरेटिंग सिस्टम नहीं है जो पूर्णांक की तुलना करता है, सीपीयू इसकी देखभाल कर रहा है। यह तार्किक फाटकों के स्तर पर बनाया गया है, कृपया इन स्लाइड्स को देखें कि यह कैसे किया जा सकता है।

वर्णमाला के बारे में, ASCII में अल्फ़ान्यूमेरिक और अन्य विशेष वर्णों को पूर्णांक के रूप में दर्शाया जाता है, इसलिए उनकी तुलना करना पूर्णांक तुलनात्मक ऑपरेशन भी है, जो CPU द्वारा किया जाता है।


4

वास्तव में, और इसकी पूरी छवि प्राप्त करने के लिए, मुझे लगता है कि यह आपकी अपनी आँखों से देखने में काफी मददगार होगा, वास्तविक CPU का डेटापाथ, उदाहरण के लिए MIPS: यहाँ छवि विवरण दर्ज करें

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

अगर (एक <b) {...}

इसे मशीन कोड में अनुवादित किया जाता है, उदाहरण के लिए mips में: blt s0, s1, यदि <b कोष्ठक में दिए गए निर्देशों को निष्पादित करता है, तो अन्य {} के बाहर निष्पादन के साथ जारी रहता है। विशेष रूप से यह निर्देश एक छद्म निर्देश है, जिसका अर्थ है कि दो अन्य (सरल) MIPS निर्देशों में slt at, s0, s1 और फिर bne at, zero, if (slt: Set Less than Than and bne: Branch on बराबर नहीं)।  

ध्यान दें कि सिग्नल शून्य, AND गेट के इनपुट में से एक है जो यह निर्धारित करता है कि प्रोग्राम काउंटर (PC) इसका मान कहाँ से लेगा: मान लें कि शाखा सिग्नल '1' है, क्योंकि हमारे पास एक शाखा ऑपरेशन है

  • शून्य = 0 घटाव का परिणाम शून्य के बराबर नहीं था, इसलिए मल्टीप्लेक्स शाखा लक्ष्य से पते का चयन करेगा और निष्पादन उस निर्देश से जारी रहेगा जो शाखा का नेतृत्व करता है।
  • शून्य = 1 परिणाम 0 (a = b) था और इसलिए MUX ने से पता चुना जहां सामान्य निष्पादन (सीरियल) में अगले निर्देश के पते की गणना की जाती है। कोई छलांग नहीं लगाई जाती है क्योंकि स्थिति (<b) अमान्य है।

आशा है कि मैंने आपको "बोनट के नीचे" देखने में मदद की। इस मामले पर आगे के विश्लेषण के लिए बेझिझक पूछें। कई चीजें जो हम प्रदान करते हैं, सीपीयू उन्हें बहुत ही आकर्षक तरीके से करते हैं!


एथन, इस डेटापथ पर "कम" ऑपरेशन कैसे काम करता है? जैसा कि मैं समझता हूं, आपने ऑपरेशन को "बराबर नहीं" बताया। "एसएलटी" निर्देश क्या करता है?
1

2

अगर आप जानना चाहते हैं कि एक वास्तविक सीपीयू यह कैसे करता है, तो यह कुछ ऐसा है।

एक सीपीयू केवल एक निश्चित आकार तक की संख्या पर काम करता है। आजकल यह आम तौर पर 64-बिट पूर्णांक है (हम फ्लोटिंग-पॉइंट संख्याओं को अनदेखा करेंगे, विचार समान होगा)।

तो हमें उसे पहचानना चाहिए

  1. एक सीपीयू बाइनरी में (बिट्स) 64 बिट्स की संख्या को किसी प्रारूप में (शायद 2s-supplement पर ) संग्रहीत कर रहा है, लेकिन यह बहुत ज्यादा मायने नहीं रखता है)।

  2. एक सीपीयू मूल रूप से इससे बड़ी संख्या के साथ कुछ भी नहीं कर सकता है। यदि हम बड़ी संख्याओं की तुलना करना चाहते हैं तो हमें सॉफ्टवेयर एल्गोरिदम लिखना होगा।

ठीक है, तो हम कहें कि हमारे पास दो संख्याएँ हैं जो प्रत्येक सामान्य आकार के 64-बिट पूर्णांक में फिट होती हैं। कह और । प्रोसेसर उनकी तुलना कैसे करता है? आमतौर पर, यह एक को दूसरे से घटाएगा (यह एक एकल देशी ऑपरेशन है जो हार्डवेयर में लागू होता है)।bab

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

यदि यह है, तो हम जानते हैं ; यदि नहीं, तो हम जानते हैं ।एक a<bab

अब, बड़ी संख्या के लिए, हमें सॉफ़्टवेयर में कुछ को लागू करना होगा जो इन छोटी तुलनाओं को सबरूटीन्स के रूप में उपयोग करेगा।


1

इस प्रश्न का उत्तर देने के लिए, मुझे पहले इंगित करना चाहिए कि कंप्यूटर, मशीन-स्तर और सॉफ़्टवेयर स्तर पर तुलना संख्याओं के लिए अमूर्तता पर कम से कम दो स्तर हैं

मशीन के स्तर पर संख्याओं की तुलना करना

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

सॉफ्टवेयर स्तर पर संख्याओं की तुलना करना

यदि आप दो नंबरों की तुलना करते हैं, एक c ++ प्रोग्राम में कहते हैं, तो यह मशीन कोड में अनुवादित है और इसलिए मशीन स्तर पर किया जाता है। हालांकि, ऐसी तुलना अधिक जटिल हो सकती है। यह वास्तव में आपके द्वारा उपयोग किए गए डेटा प्रकार पर निर्भर करता है कि तुलना मशीन कोड में कैसे अनुवादित है। सिर्फ एक उदाहरण, आप जिन संख्याओं की तुलना करना चाहते हैं, वे 64 बिट शब्दों से हैं लेकिन आपकी मशीन में केवल 32 बिट्स हैं। फिर यह संख्या एक रजिस्टर में फिट नहीं होती है, इसलिए कंपाइलर मशीन कोड स्तर पर तुलना के अनुक्रम में तुलना को तोड़ देगा। वही अधिक जटिल डेटा प्रकारों / डेटा संरचनाओं के लिए लागू होता है, उदाहरण के लिए तर्कसंगत संख्याओं, या तारों या वर्णों का प्रतिनिधित्व करना। इसलिए जब आपको दो पात्रों की तुलना करनी होती है, तो इसका अनुवाद सॉफ्टवेयर (ऑपरेटिंग सिस्टम, कंपाइलर, दुभाषिया, ...) द्वारा मशीन कोड में किया जाता है।

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


0

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

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

दूसरे शब्दों में सबसे बड़ी संख्या एक बिट की पहली घटना के साथ एक है जो एक है और दूसरा शून्य है, जो शून्य या अधिक समान 1 के प्रारंभिक रन के बाद है। गेट्स या 1-बिट तुलनाकर्ताओं से बने एक परिमित लंबाई डिजिटल तुलनित्र को इस FSM ऑपरेशन की लंबाई को कुछ निश्चित बिट्स पर तय करने के आधार पर देखा जा सकता है। (हाँ, सभी परिमित सर्किटों के बीच एक मजबूत पत्राचार है और FSM अभिकलन की "लंबाई को ठीक करना" है।)

यह एक सैद्धांतिक अभ्यास की तरह लग सकता है, लेकिन वास्तव में, सॉफ्टवेयर में तर्क मनमाने ढंग से सटीक संख्याओं का प्रतिनिधित्व करने के लिए इस FSM के अनुरूप कुछ काम करता है, सिवाय एक कंप्यूटर लूप में एन्कोड किए गए जिसे FSM के चरणों में अनुकरण या अनुकरण करते हुए देखा जा सकता है (एक कुशल कार्यान्वयन) एक सूचकांक के माध्यम से ट्रैक कर सकते हैं MSB का स्थान)।


यह भी, पूर्णांक तक सीमित नहीं के रूप में इस प्रश्न की व्याख्या / सामान्यीकरण करने देता है । प्रश्न पूर्णांक को संदर्भित करता है लेकिन शीर्षक केवल संख्याओं को संदर्भित करता है। आश्चर्यजनक रूप से किसी और ने फ्लोटिंग पॉइंट अंकगणित का उल्लेख नहीं किया है ।

मूल रूप से यह है कि तुलना करके काम करता है प्रतिपादक और अपूर्णांश जहां एक नंबर रूप में है , अपूर्णांश, प्रतिपादक ज। मंटिसा को एक नंबर पर सामान्य किया जा सकता है, जहां पहला अंक हमेशा नॉनजरो होता है। फिर दो नंबरों की तुलना करने के लिए तर्क पहले एक्सपेक्टर्स तुलना करते हैं , और यदि वे असमान हैं, तो यह मन्तीस की तुलना किए बिना परिणाम लौटा सकता है (तुलनित्र सर्किट का उपयोग करके)। यदि प्रतिपादक समान हैं, तो यह मंत्रों की तुलना करता है। a ba×10bab

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