यदि 32-बिट मशीनें केवल 2 ^ 32 तक की संख्या को संभाल सकती हैं, तो मैं अपनी मशीन के दुर्घटनाग्रस्त हुए बिना 1000000000000 (ट्रिलियन) क्यों लिख सकता हूं?


370

32-बिट कंप्यूटर केवल हस्ताक्षर किए गए पूर्णांकों को 2 31 तक स्टोर कर सकते हैं - 1.
यही कारण है कि हमने आईपीवी 4 पतों से बाहर चला है और 64-बिट युग में प्रवेश किया है।

हालाँकि, संख्या 2 31 - 1 (2,147,483,647) संख्या 1 ट्रिलियन (1,000,000,000,000) जितनी बड़ी नहीं है, जो मुझे लगता है कि मेरी मशीन के दुर्घटनाग्रस्त हुए बिना ठीक प्रदर्शित हो सकती है।

क्या कोई समझा सकता है कि ऐसा क्यों है?


35
प्रश्न त्रुटिपूर्ण है। 32-बिट मशीनें 2 ^ 32 की तुलना में बहुत बड़ी संख्या को संभाल सकती हैं। वे इसे हर समय 'लंबे' वगैरह के साथ करते हैं। वे केवल एक रजिस्टर में 2 ^ 32 तक स्टोर कर सकते हैं, लेकिन इस समस्या को बायपास करने के लिए सॉफ्टवेयर लिखा जाता है। कुछ आधुनिक भाषाओं में दी गई संख्या की लंबाई के साथ भी समस्या नहीं है।
JFA

23
कृपया प्रश्न के तकनीकी पहलुओं पर टिप्पणी, विषय, विनम्र और प्रासंगिक रखें। लगभग 50 चुटकुले टिप्पणियों को पहले ही हटा दिया गया था, और हम पोस्ट को लॉक करने से बचना चाहते हैं। धन्यवाद।
nhinkle

6
यह प्रश्न इस तरह से लिखा गया है जो थोड़ा टेढ़ा है। 1000000000000 नंबर "लिखने" और "प्रदर्शन" से आपका क्या मतलब है? जब आप प्रश्न लिखते हैं तो आपने 1000000000000 नंबर लिखा होता है, और आपका वेब ब्राउज़र इसे ठीक दिखाता है, मैं मानता हूं, लेकिन यह किसी के लिए कुछ भी अजीब नहीं होना चाहिए जिसने पहले कभी कंप्यूटर का इस्तेमाल किया हो। सवाल मुक्त व्याख्या के लिए पूछता है।
हैलोगूडीबाई

7
मानव चेतना का अनुमान लगभग 50 बिट्स (मैंने कहीं पढ़ा) है। तो सवाल यह नहीं है कि "मैं 10^9अपने पीसी को क्रैश किए बिना कैसे लिख सकता हूं ?" बल्कि "मैं 10^(18)अपने मस्तिष्क को दुर्घटनाग्रस्त हुए बिना कैसे लिख सकता हूं ?"
हेगन वॉन एटिजन

1
32 बिट कंप्यूटर केवल 2 ^ 32 - 1. 2 ^ 32 - 1 तक UNSIGNED पूर्णांक स्टोर कर सकते हैं, 2,147,483,647 के बराबर भी नहीं है ... 300 अप-वोट और किसी को भी इसका एहसास नहीं हुआ?
कोरे तुगे

जवाबों:


784

मैं आपसे एक अलग सवाल पूछकर आपके सवाल का जवाब देता हूं:

आप अपनी उंगलियों को 6 तक कैसे गिनते हैं?

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


16
मज़ेदार, @codename फिर आप अपनी उंगलियों पर 32 या अधिक (यानी एक बार 2 ^ 5 समाप्त होने पर) कैसे गिनते हैं? ;) किसी दूसरे के हाथ में जाने की उपमा अच्छी है ... भले ही बाइनरी एक दूसरे के हाथ में जाने की आवश्यकता को विलंबित करती है। बाइनरी में आगे की गिनती के लिए एक पैर की उंगलियों के लिए स्थानांतरित करने के लिए मुझे क्या देखना है कि 1,024 या उससे अधिक के साथ पेडियल निपुणता की गिनती हो रही है - 1,048,575 तक! :) यह संभावित रूप से 20-बिट्स की बेटबोर्ड पॉवर है। : P
J0e3gan

14
कृपया इस उत्तर के तकनीकी पहलुओं पर चर्चा करने के लिए टिप्पणियों को विषय और प्रासंगिक रखें। इस उत्तर से 60 से अधिक चुटकुले टिप्पणियाँ पहले ही हटाई जा चुकी हैं, और हम पोस्ट को लॉक करने से बचना चाहेंगे।
nhinkle

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

आपने @codename को कहाँ सीखा? मैंने फ्रेडरिक पोहल से यह पहली बार सुना, उदाहरण के लिए यहां देखें hjkeen.net/halqn/f_pohl3.htm
Zane

2
मुझे लगता है कि यह प्रासंगिक सवाल का जवाब नहीं है। @ Bigbio2002 द्वारा उत्तर सही है। यहाँ "1000000000000" एक संख्या नहीं है, बल्कि एक पाठ है, जैसे "adsfjhekgnoregrebgoregnkevnregj"। आप जो कह रहे हैं वह सच है, लेकिन मुझे दृढ़ता से लगता है कि यह सही उत्तर नहीं है। और इतने सारे उत्थान देखने के लिए ...
मास्टर चीफ

398

आप सही हैं कि एक 32-बिट पूर्णांक 2 ^ 32-1 से अधिक का मान नहीं रख सकता है। हालाँकि, इस 32-बिट पूर्णांक का मान और यह आपकी स्क्रीन पर कैसे दिखाई देता है, यह दो पूरी तरह से अलग चीजें हैं। मुद्रित स्ट्रिंग "1000000000000" मेमोरी में 32-बिट पूर्णांक द्वारा दर्शाया नहीं गया है।

शाब्दिक रूप से "1000000000000" संख्या प्रदर्शित करने के लिए 13 बाइट्स मेमोरी की आवश्यकता होती है। प्रत्येक अलग-अलग बाइट में 255 तक का मान हो सकता है। उनमें से कोई भी संपूर्ण, संख्यात्मक मान नहीं रख सकता है, लेकिन व्यक्तिगत रूप से ASCII वर्णों के रूप में व्याख्या की जाती है (उदाहरण के लिए, वर्ण ' 0' को दशमलव मान 48, बाइनरी मान द्वारा दर्शाया गया है 00110000), वे कर सकते हैं एक ऐसे प्रारूप में एक साथ घूमें, जो आपके लिए एक मानव के रूप में समझ में आए।


प्रोग्रामिंग में इससे संबंधित एक अवधारणा है typecasting , जिसके कारण एक कंप्यूटर की एक विशेष धारा की व्याख्या करेगा 0और 1रों। जैसा कि उपरोक्त उदाहरण में, इसकी व्याख्या संख्यात्मक मूल्य, एक चरित्र या पूरी तरह से कुछ और के रूप में की जा सकती है। जबकि एक 32-बिट पूर्णांक 1000000000000 के मूल्य को धारण करने में सक्षम नहीं हो सकता है, एक 32-बिट फ्लोटिंग-पॉइंट संख्या पूरी तरह से अलग व्याख्या का उपयोग करने में सक्षम होगी।

जैसे कि कंप्यूटर बड़ी संख्या में आंतरिक रूप से कैसे काम कर सकता है और क्या कर सकता है, इसमें 64-बिट पूर्णांक (जो कि 16 बिलियन-बिलियन तक के मूल्यों को समायोजित कर सकते हैं), फ्लोटिंग-पॉइंट वैल्यू, साथ ही विशेष पुस्तकालयों को शामिल कर सकते हैं जो मनमाने ढंग से बड़े काम कर सकते हैं संख्या।


22
दरअसल यह ज्यादातर सही है लेकिन काफी नहीं है। एक 32 पॉइंट फ्लोटिंग पॉइंट नंबर 1000000000000 का सही प्रतिनिधित्व करने में सक्षम होने की संभावना नहीं है। यह एक नंबर को वांछित संख्या के बहुत करीब का प्रतिनिधित्व करेगा, लेकिन वास्तव में यह नहीं।
टिम बी

6
@ टिम: क्या आपने दशमलव 32 प्रारूप के बारे में सुना है? यह IEEE 754-2008 मानक का हिस्सा है। यह प्रारूप इस संख्या का सही प्रतिनिधित्व करने में सक्षम है :)
VX

15
सच है, यह कर सकते हैं। हालाँकि, यह प्रारूप लोगों का मतलब नहीं है जब वे "फ्लोट" कहते हैं, जो आमतौर पर वर्तमान कंप्यूटरों में मानक फ़्लोटिंग पॉइंट प्रोसेसर द्वारा संग्रहीत और उपयोग के रूप में एक 32 बिट फ्लोटिंग पॉइंट नंबर को संदर्भित करता है।
टिम बी

2
@TimB वास्तव में जो एक फ्लोट 32 के रूप में दर्शाया जा सकता है उसका निकटतम नंबर 999999995904 है
greggo

4
@ टीबीबी: लेकिन 64-बिट फ्लोटिंग-पॉइंट नंबर आसानी से 1000000000000वास्तव में प्रतिनिधित्व कर सकता है। यह 10 ^ 12, या 2 ^ 12 * 5 ^ 12 है; 5 ^ 12 को मंटिसा के 28 बिट्स की आवश्यकता होती है।
कीथ थॉम्पसन

191

सबसे पहले और सबसे महत्वपूर्ण, 32-बिट कंप्यूटर एकल मशीन शब्द में 2 1-1 तक संख्याओं को संग्रहीत कर सकते हैं । मशीन शब्द वह डेटा है जो सीपीयू प्राकृतिक तरीके से संसाधित कर सकता है (यानी, उस आकार के डेटा पर संचालन हार्डवेयर में लागू किया जाता है और आमतौर पर प्रदर्शन करने के लिए सबसे तेज़ होता है)। 32-बिट CPU में 32 बिट्स वाले शब्दों का उपयोग होता है, इस प्रकार वे एक शब्द में 0 से 2 1-1 तक संख्याओं को संग्रहीत कर सकते हैं ।

दूसरा, 1 ट्रिलियन और 1000000000000 दो अलग-अलग चीजें हैं।

  • 1 ट्रिलियन संख्या की एक अमूर्त अवधारणा है
  • 1000000000000 पाठ है

1एक बार और फिर 012 बार दबाकर आप टेक्स्ट टाइप कर रहे हैं। 1आदानों 1, 0आदानों 0। देख? आप अक्षर टाइप कर रहे हैं। वर्ण संख्या नहीं हैं। टाइपराइटर में कोई सीपीयू या मेमोरी नहीं थी और वे ऐसे "नंबरों" को बहुत अच्छी तरह से संभाल रहे थे, क्योंकि यह सिर्फ पाठ है।

सबूत है कि 1000000000000 एक संख्या नहीं है, लेकिन पाठ: इसका मतलब 1 ट्रिलियन (दशमलव में), 4096 (बाइनरी में) या 281474976710656 (हेक्साडेसिमल में) हो सकता है। विभिन्न प्रणालियों में इसके और भी अर्थ हैं। 1000000000000 का अर्थ एक संख्या है और इसे संग्रहीत करना एक अलग कहानी है (हम इसे एक पल में वापस प्राप्त करेंगे)।

पाठ को संग्रहीत करने के लिए (प्रोग्रामिंग में इसे स्ट्रिंग कहा जाता है ) 1000000000000 आपको 14 बाइट्स की आवश्यकता होती है (प्रत्येक वर्ण के लिए एक प्लस NULL बाइट जो मूल रूप से "स्ट्रिंग यहाँ समाप्त होता है")। वह 4 मशीन शब्द हैं। 3 और आधा पर्याप्त होगा, लेकिन जैसा कि मैंने कहा, मशीन शब्दों पर संचालन सबसे तेज है। मान लें कि ASCII का उपयोग टेक्स्ट स्टोरेज के लिए किया जाता है, इसलिए मेमोरी में यह इस तरह दिखाई देगा: (ASCII कोड को बाइनरी लाइन के प्रत्येक शब्द के अनुरूप 0और 1बाइनरी में कनवर्ट करना )

00110001 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00000000 00000000 00000000

चार वर्ण एक शब्द में फिट होते हैं, बाकी को अगले एक में ले जाया जाता है। बाकी को अगले शब्द तक ले जाया जाता है जब तक कि सब कुछ (पहले NULL बाइट सहित) फिट नहीं हो जाता।

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

  • हमारा काल्पनिक कंप्यूटर बाइनरी के बजाय दशमलव का उपयोग करता है
  • एक बाइट संख्या पकड़ कर सकते हैं 0..9
  • एक शब्द में दो बाइट्स होते हैं

यहाँ एक खाली 2-शब्द मेमोरी है:

0 0
0 0

चलो नंबर 4 स्टोर करें:

0 4
0 0

अब 9 जोड़ते हैं:

1 3
0 0

ध्यान दें कि दोनों ऑपरेंड एक बाइट में फिट होंगे, लेकिन परिणाम नहीं। लेकिन हमारे पास उपयोग करने के लिए एक और तैयार है। अब 99 स्टोर करते हैं:

9 9
0 0

फिर से, हमने नंबर को स्टोर करने के लिए दूसरे बाइट का उपयोग किया है। आइए 1 जोड़ें:

0 0
0 0

वूप्स ... यह पूर्णांक अतिप्रवाह कहा जाता है और कई गंभीर समस्याओं का कारण होता है, कभी-कभी बहुत महंगा होता है

लेकिन अगर हम उम्मीद करते हैं कि अतिप्रवाह होगा, तो हम यह कर सकते हैं:

0 0
9 9

और अब 1 जोड़ें:

0 1
0 0

यह स्पष्ट हो जाता है यदि आप बाइट को अलग करने वाले स्थानों और नई लाइनों को हटा देते हैं:

0099    | +1
0100

हमने भविष्यवाणी की है कि अतिप्रवाह हो सकता है और हमें अतिरिक्त मेमोरी की आवश्यकता हो सकती है। इस तरह से संख्याओं को संभालना उन संख्याओं के साथ अधिक तेज़ नहीं है जो एकल शब्दों में फिट होती हैं और इसे सॉफ्टवेयर में लागू किया जाना है। एक 32-बिट CPU के लिए दो-32-बिट-शब्द-संख्याओं के लिए समर्थन को प्रभावी ढंग से जोड़ना 64-बिट CPU बनाता है (अब यह 64-बिट संख्याओं पर मूल रूप से, सही तरीके से काम कर सकता है?)।

मैंने जो कुछ ऊपर वर्णित किया है, वह 8-बिट बाइट्स और 4-बाइट शब्दों के साथ बाइनरी मेमोरी पर लागू होता है, यह उसी तरह से काम करता है:

00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111    | +1
00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000

ऐसी संख्याओं को दशमलव प्रणाली में बदलना मुश्किल है, हालाँकि। (लेकिन यह हेक्साडेसिमल के साथ बहुत अच्छा काम करता है )


21
आपका उत्तर पढ़ता है बल्कि कृपालु है। ओपी स्पष्ट रूप से संख्या के बारे में बात कर रहा है, पाठ नहीं large as the number 1 trillion (1000000000000):। इसके अलावा, आप लगभग आर्बिटवर्स-सटीक अंकगणित के बारे में बात कर रहे हैं , लेकिन आप जो भी कह रहे हैं, उसके लिए आपने कभी भी किसी भी शब्द का उल्लेख नहीं किया है ...
मिररफाइंड

12
"1 ट्रिलियन" भी एक तार है
एल्जो वालुगी

3
@ElzoValugi यह है। मुझे सार संख्या की अवधारणा को प्रस्तुत करने के लिए कुछ तरीका खोजना था, क्योंकि एक संख्या का प्रतिनिधित्व करने के लिए स्ट्रिंग के विपरीत। मेरा मानना ​​है कि "1 ट्रिलियन" ऐसा करने का एक बेहतर और कम अस्पष्ट तरीका है (जवाब में प्रमाण देखें)।
ग्रोनोस्तज

25
@MirroredFate मैं 'नंबर के बारे में स्पष्ट रूप से बात कर रहा हूं' से असहमत हूं। ओपी जो स्पष्ट रूप से 'ठीक से प्रदर्शित' का कहना है कि है मेरे लिए पाठ '1000000000000' के बारे में बात ...
जो

4
@ यन्नबेन 'ए' एक चरित्र है और संख्या नहीं है। '?' एक चरित्र है और एक संख्या नहीं है। '1' एक चरित्र है और संख्या भी नहीं है। वर्ण केवल प्रतीक हैं। वे अंकों या संख्याओं का प्रतिनिधित्व कर सकते हैं, लेकिन निश्चित रूप से वे संख्याएं नहीं हैं। '1' एक, दस, सौ, हज़ार और इतने पर खड़ा हो सकता है, यह सिर्फ एक प्रतीक है जो एक अंक के लिए खड़ा है जो एक संख्या या उसका हिस्सा हो सकता है। '10' (वर्णों का तार) का अर्थ दो या आठ या दस या सोलह आदि हो सकते हैं, लेकिन जब आप कहते हैं कि आपके पास दस सेब हैं, तो आप दस नंबर का उपयोग कर रहे हैं और हर कोई जानता है कि आपका क्या मतलब है। वर्ण और संख्या के बीच बहुत बड़ा अंतर है।
ग्रोनोस्तज १५'१४

40

आप अपने कंप्यूटर को क्रैश किए बिना भी "इस आंकड़े को लिख सकते हैं " :) @ स्कॉट का जवाब कुछ गणना रूपरेखाओं के लिए स्पॉट-ऑन है, लेकिन बड़ी संख्या में "लिखने" के आपके प्रश्न का तात्पर्य है कि यह सिर्फ सादा पाठ है, कम से कम तक इसकी व्याख्या है।

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

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

आइए अहस्ताक्षरित पूर्णांक से शुरू करें । इन मूल्य प्रकारों में, सभी बिट्स का उपयोग अंकों के बारे में जानकारी संग्रहीत करने के लिए किया जाता है; तुम्हारा एक का एक उदाहरण है 32-बिट अहस्ताक्षरित पूर्णांक जहां से किसी भी मूल्य 0के लिए 2^32-1भंडारित किया जा सकता। और हां, आपके द्वारा उपयोग किए जाने वाले प्लेटफॉर्म की भाषा या वास्तुकला के आधार पर आपके पास 16-बिट पूर्णांक या 256-बिट पूर्णांक हो सकते हैं।

यदि आप नकारात्मक प्राप्त करना चाहते हैं तो क्या होगा? सहज रूप से, हस्ताक्षरित पूर्णांक गेम का नाम है। कन्वेंशन से सभी मूल्यों को आवंटित -2^(n-1)करना है 2^(n-1)-1- इस तरह हम लिखने +0और दो तरीकों से निपटने के भ्रम की स्थिति से बचते हैं -0। तो एक 32-बिट पर हस्ताक्षर किए पूर्णांक से एक मूल्य पकड़ होगा -2147483648करने के लिए 2147483647। नीट, है ना?

ठीक है, हमने पूर्णांक को कवर किया है जो एक दशमलव घटक के बिना नंबर हैं। इन्हें व्यक्त करना मुश्किल है: गैर-पूर्णांक वाला भाग समझदारी से केवल बीच में हो सकता है 0और 1इसलिए इसका वर्णन करने के लिए उपयोग किया जाने वाला प्रत्येक अतिरिक्त बिट इसकी सटीकता में वृद्धि करेगा: 1/2, 1/4, 1/8 ... समस्या यह है, आप 0.1भिन्नों के योग के रूप में एक साधारण दशमलव को सटीक रूप से व्यक्त नहीं किया जा सकता है जो उनके हर में केवल दो की शक्तियां हो सकती हैं! क्या संख्या को पूर्णांक के रूप में संग्रहित करना बहुत आसान नहीं होगा, लेकिन इसके बजाय मूलांक (दशमलव) बिंदु पर सहमत होना चाहिए? इसे निश्चित बिंदु संख्या कहा जाता है , जहां हम संग्रहीत करते हैं 1234100लेकिन 1234.100इसके बजाय इसे पढ़ने के लिए एक सम्मेलन पर सहमत होते हैं ।

गणना के लिए उपयोग किया जाने वाला एक अपेक्षाकृत अधिक सामान्य प्रकार है floating point। जिस तरह से यह काम करता है वह वास्तव में साफ-सुथरा होता है, यह साइन वैल्यू को स्टोर करने के लिए एक बिट का उपयोग करता है, तो कुछ एक्सपोनेंट और महत्व को स्टोर करने के लिए। ऐसे आवंटन हैं जो ऐसे आवंटन को परिभाषित करते हैं, लेकिन एक 32-बिट फ्लोट के लिए अधिकतम संख्या जिसे आप स्टोर कर पाएंगे, वह एक जबरदस्त है

(2 - 2^-23) * 2^(2^7 - 1) ≈ 3.4 * 10^38

यह हालांकि सटीक की लागत पर आता है। ब्राउज़रों में उपलब्ध जावास्क्रिप्ट 64-बिट फ़्लोट का उपयोग करता है, और यह अभी भी चीजों को सही नहीं कर सकता है। बस इसे एड्रेस बार में कॉपी करें और एंटर दबाएं। स्पॉइलर अलर्ट: परिणाम नहीं होने वाला है 0.3

javascript:alert(0.1+0.2);

Microsoft .NET 4.5 जैसे अधिक वैकल्पिक प्रकार हैं BigInteger, जिनमें सैद्धांतिक रूप से कोई ऊपरी या निचला सीमा नहीं है और "बैच" में गणना की जानी है; लेकिन शायद अधिक आकर्षक प्रौद्योगिकियां हैं जो गणित को समझती हैं , जैसे वोल्फ्राम मैथमेटिका इंजन, जो सटीक रूप से अनंतता जैसे अमूर्त मूल्यों के साथ काम कर सकता है ।


8
आप इस वास्तविकता में ऐसा कर सकते हैं । स्टार ट्रेक ब्रह्मांड में ऐसा करने की कोशिश करें। सभी स्पार्क्स और धुएं के कारण, पहले वापस खड़े हो जाओ।
माइकल पेट्रोत्ता

यह ठीक नहीं है कि फिक्स्ड-पॉइंट कैसे काम करता है। यह वास्तव में एक प्रणाली है जहां संख्याओं को स्केल किया जाता है और दशमलव बिंदु का उत्पादन करने के लिए पक्षपाती होता है। आपके उदाहरण में पैमाना 1/1000 है, लेकिन इसमें भी नियत-बिंदु संख्याएँ (विशेषकर कंप्यूटर ग्राफिक्स में) इस तरह हैं: 0 = 0.0, 255 = 1.0 - पैमाने 1/255 हैं।
एंडॉन एम। कोलमैन

31

कुंजी समझ रही है कि कंप्यूटर कैसे संख्याओं को कूटबद्ध करता है

सच है, यदि कोई कंप्यूटर एक एकल शब्द (एक 32 बिट सिस्टम पर 4 बाइट्स) का उपयोग करके संख्या के एक सरल बाइनरी प्रतिनिधित्व का उपयोग करके संख्याओं को संग्रहीत करने पर जोर देता है, तो एक 32 बिट कंप्यूटर केवल 2 ^ 32 तक की संख्याओं को संग्रहीत कर सकता है। लेकिन संख्याओं को सांकेतिक शब्दों में बदलना करने के लिए बहुत सारे तरीके हैं जो इस बात पर निर्भर करता है कि आप उनके साथ क्या हासिल करना चाहते हैं।

एक उदाहरण यह है कि कंप्यूटर फ्लोटिंग पॉइंट नंबर कैसे स्टोर करते हैं। कंप्यूटर उन्हें सांकेतिक शब्दों में बदलना करने के लिए विभिन्न तरीकों का एक पूरा गुच्छा का उपयोग कर सकते हैं। मानक IEEE 754 2 ^ 32 से बड़े एन्कोडिंग नंबरों के लिए नियमों को परिभाषित करता है। गंभीर रूप से, कंप्यूटर संख्या के कुछ अंकों का प्रतिनिधित्व करते हुए 32 बिट्स को विभिन्न भागों में विभाजित करके इसे लागू कर सकते हैं और अन्य बिट्स संख्या के आकार (यानी घातांक, 10 ^ x) का प्रतिनिधित्व करते हैं । यह बहुत बड़ी रेंज की अनुमति देता हैआकार की संख्या के संदर्भ में, लेकिन सटीकता से समझौता करता है (जो कई उद्देश्यों के लिए ठीक है)। बेशक कंप्यूटर इस एन्कोडिंग के लिए एक से अधिक शब्दों का भी उपयोग कर सकता है जो उपलब्ध एन्कोडेड संख्याओं की परिमाण की सटीकता को बढ़ाता है। IEEE मानक का सरल दशमलव 32 संस्करण परिमाण में 7 दशमलव अंकों की सटीकता और लगभग 10 ^ 96 तक की संख्या के साथ संख्याओं की अनुमति देता है।

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


24

यह सब आपके सवाल में है।

आप अपनी पसंद का कोई भी नंबर कागज पर लिख सकते हैं । कागज की एक सफेद शीट पर एक ट्रिलियन डॉट्स लिखने की कोशिश करें। यह धीमा और अप्रभावी है। इसलिए हमारे पास उन बड़ी संख्याओं का प्रतिनिधित्व करने के लिए 10 अंकों की प्रणाली है। यहां तक ​​कि हमारे पास "मिलियन", "ट्रिलियन" और अधिक जैसी बड़ी संख्या के लिए नाम हैं, इसलिए आप one one one one one one one one one one one...ज़ोर से नहीं कहते हैं।

32-बिट प्रोसेसर को मेमोरी के ब्लॉक के साथ सबसे तेज और कुशलता से काम करने के लिए डिज़ाइन किया गया है जो कि वास्तव में 32 बाइनरी अंक हैं। लेकिन हम, लोग, आमतौर पर 10-अंकीय संख्यात्मक प्रणाली का उपयोग करते हैं, और कंप्यूटर, इलेक्ट्रॉनिक होने के कारण, 2-अंकीय प्रणाली ( बाइनरी ) का उपयोग करते हैं। संख्या 32 और 64 सिर्फ 2 की शक्तियां होती हैं। इसलिए एक मिलियन और ट्रिलियन 10 की शक्तियां हैं। उदाहरण के लिए, 65536 के मल्टीट्यूड की तुलना में इन नंबरों के साथ काम करना हमारे लिए आसान है।

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


15

32 बिट और 64 बिट मेमोरी पतों को संदर्भित करते हैं। आपकी कंप्यूटर मेमोरी पोस्ट ऑफिस बॉक्स की तरह है, हर एक का पता अलग है। सीपीयू (सेंट्रल प्रोसेसिंग यूनिट) उन पतों का उपयोग आपके रैम (रैंडम एक्सेस मेमोरी) पर स्मृति स्थानों को संबोधित करने के लिए करता है। जब CPU केवल 16bit पतों को संभाल सकता था, तो आप केवल 32mb RAM का उपयोग कर सकते थे (जो उस समय बहुत बड़ा लगता था)। 32bit के साथ यह 4 + gb (जो उस समय बहुत बड़ा लगता था) गया। अब जब हमारे पास 64 बिट पते हैं तो रैम टेराबाइट्स (जो बहुत बड़ा लगता है) में चला जाता है।
हालाँकि यह प्रोग्राम मेमोरी नंबर के कई ब्लॉक आवंटित करने में सक्षम है जैसे कि नंबर और टेक्स्ट को स्टोर करना, जो प्रोग्राम पर निर्भर है और प्रत्येक पते के आकार से संबंधित नहीं है। तो एक कार्यक्रम सीपीयू को बता सकता है, मैं भंडारण के 10 पते ब्लॉकों का उपयोग करने जा रहा हूं और फिर एक बहुत बड़ी संख्या, या 10 पत्र स्ट्रिंग या जो भी स्टोर कर सकता हूं।
साइड नोट: मेमोरी एड्रेस "पॉइंटर्स" द्वारा इंगित किए जाते हैं, इसलिए 32- और 64-बिट वैल्यू का मतलब मेमोरी को एक्सेस करने के लिए उपयोग किए गए पॉइंटर के आकार का है।


2
विवरण के अलावा अच्छा जवाब - पता स्थान की 16 बिट्स ने आपको 64kb दिए, 32mb नहीं, और 286 जैसी मशीनों में 24-बिट पते (16mb के लिए) थे। इसके अलावा, 64-बिट पतों के साथ, आप टेराबाइट्स से आगे जाते हैं - 16 एक्सैबाइट्स की तरह - टेराबाइट्स की सीमा के आस-पास है कि वर्तमान पीढ़ी के मदरबोर्ड / सीपीयू लगा रहे हैं - पतों का आकार नहीं।
फिल

4
32-बिट मशीन शब्द आकार को संदर्भित करता है, मेमोरी एड्रेस को नहीं। जैसा कि फिल ने बताया, 286 16-बिट सीपीयू था लेकिन मेमोरी सेगमेंट के माध्यम से संबोधित करने के लिए 24 बिट्स का उपयोग किया। x86 CPU 32-बिट हैं, लेकिन 36-बिट एड्रेसिंग का उपयोग करते हैं। देखें पीएई
ग्रोन्स्तोज

@gronostaj वेल x86 में 386 से पेंटियम तक 32-बिट एड्रेसिंग हैं।
रुस्लान

अपवोट क्योंकि यह यहाँ केवल एकमात्र उत्तर है - 32 बिट 32 बिट मेमोरी को संदर्भित करता है, न कि 32 बिट अंकगणित।
user1207217

@ user1207217: ?? तो उदाहरण के लिए आपके तर्क के अनुसार Z80 या 8080 16-बिट प्रोसेसर हैं (16-बिट मेमोरी एड्रेसिंग और मेमोरी बस के कारण)?
पाबॉक

13

क्योंकि संख्या प्रदर्शित करना व्यक्तिगत वर्णों का उपयोग करके किया जाता है, पूर्णांक नहीं। संख्या के प्रत्येक अंक को एक अलग वर्ण शाब्दिक के साथ दर्शाया जाता है, जिसका पूर्णांक मान उपयोग किए जा रहे एन्कोडिंग द्वारा परिभाषित किया जाता है, उदाहरण के लिए 'a'एस्की मूल्य के साथ प्रतिनिधित्व किया जाता है 97, जबकि '1'इसके साथ प्रतिनिधित्व किया जाता है 49। चेक यहाँ ascii तालिका
प्रदर्शित करने के लिए 'a' और '1' दोनों समान हैं। वे चरित्र शाब्दिक हैं, पूर्णांक नहीं। प्रत्येक वर्ण शाब्दिक को 8-बिट या 1 बाइट आकार में मान को संग्रहीत करने वाले 32-बिट प्लेटफ़ॉर्म में अधिकतम 255 होने की अनुमति है (यह प्लेटफ़ॉर्म निर्भर है, हालांकि 8 बिट सबसे आम चरित्र आकार है), इस प्रकार उन्हें एक साथ समूहीकृत किया जा सकता है और हो सकता है का प्रदर्शन किया। वे कितने अलग अक्षर दिखा सकते हैं यह आपके पास मौजूद RAM पर निर्भर करता है। अगर आपके पास सिर्फ 1 बाइट रैम है तो आप सिर्फ एक कैरेक्टर को प्रदर्शित कर सकते हैं, अगर आपके पास 1 जीबी रैम है, तो आप 1024 * 1024 * 1024 कैरेक्टर (गणित करने के लिए बहुत आलसी) अच्छी तरह से प्रदर्शित कर सकते हैं।

यह सीमा हालांकि गणना पर लागू होती है, हालांकि मुझे लगता है कि आप IPV4 मानक के बारे में रुचि रखते हैं। हालाँकि यह पूरी तरह से कंप्यूटर से संबंधित नहीं हैbit-size, यह किसी भी तरह से मानकों को प्रभावित करता है। जब IPV4 मानक बनाया गया, तो उन्होंने IP मानों को 32-बिट पूर्णांक में संग्रहीत किया। अब एक बार जब आपने आकार दिया, और यह मानक बन गया। इंटरनेट के बारे में हम जो कुछ भी जानते हैं वह उस पर निर्भर था, और फिर हम असाइन करने के लिए आईपी पते से बाहर भाग गए। इसलिए यदि आईपी मानक को 64 बिट में संशोधित किया गया था, तो सब कुछ काम करना बंद कर देगा, जिसमें आपका राउटर भी शामिल है (मैं इसे सही मानता हूं) और अन्य नेटवर्किंग डिवाइस। इसलिए एक नया मानक बनाया जाना चाहिए, जिसने 32 बिट पूर्णांक को 128 बिट के साथ स्वैप किया। और मानक के बाकी समायोजित। हार्डवेयर निर्माता को केवल यह घोषित करने की आवश्यकता है कि वे इस नए मानक का समर्थन करते हैं और यह वायरल हो जाएगा। हालाँकि यह इतना आसान नहीं है, लेकिन मुझे लगता है कि आपको यहाँ बात मिल गई है।

अस्वीकरण: यहाँ वर्णित अधिकांश बिंदु मेरी धारणा के लिए सही हैं। मैंने इसे सरल बनाने के लिए यहां महत्वपूर्ण बिंदुओं को याद किया होगा। मैं संख्याओं के साथ अच्छा नहीं हूं, इसलिए कुछ अंकों में चूक हुई होगी, लेकिन मेरी बात यहां ओपी के जवाब के बारे में बताई गई है कि यह पीसी को क्रैश क्यों नहीं करेगा।


2
मैं नीचे नहीं गया, लेकिन आपके उत्तर के साथ कई समस्याएं हैं। 1ASCII में 0x31 है, 0x1 नहीं है। 1 GB = 1024 ^ 3 B. IPv4 wad का आविष्कार 32-बिट सीपीयू को पेश करने से पहले किया गया था, इसलिए यह कहना कि पते 32-बिट पूर्णांक में संग्रहीत थे, ओपी के प्रश्न के साथ विरोधाभास है। और अंत में IPv6 128-बिट पते का उपयोग कर रहा है, 64-बिट का नहीं।
ग्रोनोस्तज

13

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

पूरी तरह से अलग पहलू संगणना है। एसएसई और एमएमएक्स निर्देश सेट लंबे पूर्णांक स्टोर कर सकते हैं। उत्पादकता की हानि के बिना अधिकतम अधिकतम वर्तमान एसएसई संस्करण पर निर्भर करता है, लेकिन इसके बारे में हमेशा 64 बिट्स का होता है।

वर्तमान ओप्टरॉन प्रोसेसर 256 बिट वाइड नंबरों को संभाल सकता है (मैं पूर्णांक के बारे में निश्चित नहीं हूं, लेकिन फ्लोट सुनिश्चित करने के लिए है)।

सारांश : (1) बस चौड़ाई सीधे कम्प्यूटेशन चौड़ाई से जुड़ी नहीं है, (2) यहां तक ​​कि अलग-अलग शब्द (मेमोरी शब्द, रजिस्टर शब्द, बस शब्द आदि) एक दूसरे से जुड़े नहीं हैं, अन्य तो उनके पास 8 या 16 के बारे में आम भाजक है 24. कई प्रोसेसर ने 6 बिट शब्द (लेकिन इसका इतिहास) भी इस्तेमाल किया।


यह सच नहीं है, मूल पेंटियम प्रोसेसर में उच्च मेमोरी बैंडविड्थ के लिए 64-बिट डेटा बस थी, भले ही यह 32-बिट प्रोसेसर था। 8088 एक 8-बिट डेटा बस के साथ 16-बिट प्रोसेसर था।
doug65536

10

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

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

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

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

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


10

अंतर यह है कि हम कंप्यूटर में डेटा कैसे स्टोर करते हैं।

आप सही हैं कि एक सैद्धांतिक 8-बिट मशीन के लिए, हम केवल एकल प्रोसेसर रजिस्टर या मेमोरी एड्रेस में 2 ^ 8 मान स्टोर करने में सक्षम हैं। (कृपया ध्यान रखें कि यह "मशीन" से "मशीन" के लिए उपयोग किए जाने वाले प्रोसेसर, मेमोरी आर्किटेक्चर, आदि के आधार पर भिन्न होता है। लेकिन अभी के लिए, एक काल्पनिक 'स्टीरियोटाइप' मशीन से चिपके रहते हैं।)

एक सैद्धांतिक 16-बिट मशीन के लिए, एक रजिस्टर / मेमोरी लोकेशन में अधिकतम मूल्य 2 ^ 16 होगा, 32-बिट मशीन के लिए, 2 ^ 32, आदि।

इन वर्षों में, प्रोग्रामर ने सभी प्रकार के क्रोनरी को स्टोर करने के लिए तैयार किया है और एक प्रोसेसर रजिस्टर या मेमोरी एड्रेस में स्टोर किए जाने वाले नंबर से अधिक संभाल सकते हैं। कई विधियाँ मौजूद हैं, लेकिन वे सभी "मूल" रजिस्टर / मेमोरी स्थान की चौड़ाई से बड़े मूल्यों को संग्रहीत करने के लिए एक से अधिक रजिस्टर / मेमोरी एड्रेस का उपयोग करते हैं।

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

इसलिए रजिस्टरों, स्मृति स्थानों और मेमोरी एड्रेस हार्डवेयर को "व्यापक" बनाने की सामान्य इच्छा और बड़ी संख्या में "मूल रूप से" को संभालने के लिए व्यापक है, इसलिए ऐसी संख्याओं को न्यूनतम संख्या में संचालन के साथ संभाला जा सकता है।

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


8

32 बिट कंप्यूटर केवल एकल मशीन शब्द में 2 ^ 32 तक की संख्या को स्टोर कर सकते हैं, लेकिन इसका मतलब यह नहीं है कि वे डेटा की बड़ी संस्थाओं को संभाल नहीं सकते हैं।

32 बिट कंप्यूटर का अर्थ आम तौर पर यह है कि डेटा बस और एड्रेस बस 32 बिट्स चौड़ी है, जिसका अर्थ है कि कंप्यूटर एक बार में 4 जीबी मेमोरी एड्रेस स्पेस को संभाल सकता है, और डेटा बस में एक समय में चार बाइट्स डेटा भेज सकता है। ।

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

नियमित रूप से इंटेल 32-बिट प्रोसेसर आंतरिक रूप से 128-बिट संख्या को संभाल सकता है, जो आपको 10000000000000000000000000000000000 जैसे नंबर को बिना किसी समस्या के हैंडल करने देगा।

आप एक कंप्यूटर की तुलना में बहुत बड़ी संख्या को संभाल सकते हैं, लेकिन फिर गणना सॉफ्टवेयर द्वारा की जानी है, सीपीयू में 128 बिट्स से बड़ी संख्या को संभालने के लिए निर्देश नहीं हैं। (यह फ़्लोटिंग पॉइंट नंबरों के रूप में बहुत बड़ी संख्या को संभाल सकता है, लेकिन तब आपके पास केवल 15 अंकों की सटीकता है।)


6

बस कई अन्य उत्तरों में एक नोट जोड़ रहा है, क्योंकि यह इस प्रश्न में एक बहुत महत्वपूर्ण तथ्य है जो याद किया गया है।

"32 बिट" मेमोरी एड्रेस की चौड़ाई को संदर्भित करता है। इसका रजिस्टर साइज से कोई लेना-देना नहीं है। कई 32 बिट सीपीयू में 64 या 128 बिट रजिस्टर होने की संभावना है। विशेष रूप से x86 उत्पाद लाइन का जिक्र करते हुए, हाल ही में उपभोक्ता सीपीयू, जो सभी 64 बिट हैं, विशेष उद्देश्यों के लिए 256 बिट रजिस्टरों तक हैं।

रजिस्टर की चौड़ाई और पते की चौड़ाई के बीच यह अंतर प्राचीन काल से मौजूद है, जब हमारे पास 4 बिट रजिस्टर और 8 बिट पते, या वर्सा था।

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

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


यह वास्तव में सच नहीं है; 64 बिट का तात्पर्य असंगत है, लेकिन 64 बिट के रजिस्टर चौड़ाई वाले सिस्टम को अक्सर 64 बिट कहा जाता है। विकिपीडिया का कहना है कि "64-बिट कंप्यूटर आर्किटेक्चर में आमतौर पर पूर्णांक और एड्रेसिंग रजिस्टर होते हैं जो 64 बिट्स चौड़े होते हैं"। हां, आधुनिक x86 (या एएमडी -64) उत्पाद लाइन में विशाल विशेष उद्देश्य रजिस्टर हैं, लेकिन उनके पास 64 बिट मुख्य रजिस्टर हैं और स्मृति के 48-52 बिट्स तक पहुंच सकते हैं; पुराने x86 सिस्टम में 32 बिट मुख्य रजिस्टर हैं और मेमोरी के 24-36 बिट्स एक्सेस करते हैं, और 8086 को 16-बिट चिप कहा जाता है, इसमें 16-बिट वाइड रजिस्टर थे और मेमोरी के 20 बिट्स एक्सेस किए थे।
अभियोजन पक्ष

@prosfilaes यह बहुत मूल्यवान जानकारी है, मैं उन लोगों का उल्लेख कर रहा था (मैं विवरणों को याद करने में विफल रहा और साथ ही साथ आपने भी किया)। इसे उत्तर में संपादित करने के लिए स्वतंत्र महसूस करें।
मफू

6

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

तो, बस कुछ स्पष्ट करने के लिए, जो स्पष्ट रूप से इंगित नहीं किया गया है, लेकिन स्पष्ट रूप से किसी अन्य उत्तर में व्यक्त नहीं किया गया है, और जो मुझे लगता है कि इस मामले की जड़ है:

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

स्पष्ट रूप से:

  • "IPv4 / 6" इंटरनेट प्रोटोकॉल को संदर्भित करता है , यह निर्धारित करने का एक नियम है कि इंटरनेट पर जानकारी को कैसे पैक और व्याख्या किया जाना है। IPv4 और IPv6 के बीच प्राथमिक (या कम से कम सबसे अच्छी तरह से ज्ञात) अंतर यह है कि पता स्थान (यानी नेटवर्क पर विभिन्न स्थानों के बीच अंतर करने के लिए उपयोग किए जा सकने वाले पतों का सेट) IPv6 में बड़ा है। यह पैकेट के प्रेषक और इच्छित प्राप्तकर्ता की पहचान के लिए (यानी के उद्देश्य के लिए अलग सेट) के लिए आवंटित किए गए डेटा के प्रत्येक पैकेट में कितने बिट्स के साथ करना है।
    • गैर-कंप्यूटिंग सादृश्य: प्रत्येक पैकेट घोंघा-मेल के माध्यम से भेजे गए एक पत्र की तरह होता है, और पता स्थान लिफाफे पर पता और रिटर्न-पता लिखते समय उपयोग किए जाने वाले वर्णों की मात्रा होती है, जिन्हें आप "अनुमति" देते हैं।
    • मैं अब तक किसी भी अन्य उत्तर में इसका उल्लेख नहीं देखता हूं।
  • कंप्यूटर-मेमोरी "शब्द" (32-बिट और 64-बिट) आमतौर पर डेटा के सबसे छोटे टुकड़े के रूप में सोचा जा सकता है जो कंप्यूटर का उपयोग करता है, या "सोचता है"। डेटा के ये बिट्स डेटा के अन्य बिट्स बनाने के लिए एक साथ आते हैं। , जैसे कि पाठ या बड़े पूर्णांकों का हिस्सा।
    • गैर-कंप्यूटिंग सादृश्यता: शब्दों को थोड़ा सोचा जा सकता है जैसे कागज पर शब्द बनाने वाले पत्र, या विचार की ट्रेन में व्यक्तिगत शब्दों के रूप में भी।
    • देखे Guffa का जवाब , sanaris का जवाब है, और के पहले पैराग्राफ gronostaj का जवाब
  • 32-बिट पॉइंटर्स शब्द हो सकते हैं या नहीं भी हो सकते हैं, लेकिन फिर भी उनके साथ परमाणु व्यवहार किया जाता है (जैसे कि अलग-अलग इकाइयों को छोटे घटकों में नहीं तोड़ा जा सकता है)। पॉइंटर्स निम्नतम-स्तरीय तरीका है जिसमें एक कंप्यूटर डेटा के कुछ अनियंत्रित चंक की स्मृति में स्थान रिकॉर्ड कर सकता है। ध्यान दें कि कंप्यूटर द्वारा उपयोग किए जाने वाले पॉइंटर का आकार (या, वास्तव में, ऑपरेटिंग सिस्टम द्वारा) मेमोरी की सीमा को सीमित करता है, जिसे एकल पॉइंटर द्वारा एक्सेस किया जा सकता है, क्योंकि केवल कई संभावित मेमोरी लोकेशन हैं जो पॉइंटर को "पॉइंट" कर सकते हैं जैसा कि पॉइंटर के लिए संभव मान हैं। यह उस तरीके के अनुरूप है जिसमें IPv4 संभव इंटरनेट पते की सीमा को सीमित करता है, लेकिन ऐसा नहीं करता हैउदाहरण के लिए, किसी विशेष वेब पेज में मौजूद डेटा की मात्रा को सीमित कर सकते हैं। हालाँकि, पॉइंटर का आकार केवल उस डेटा के आकार को सीमित नहीं करता है जिस पर पॉइंटर इंगित कर सकता है। (सूचक सीमा से अधिक डेटा आकार की अनुमति देने के लिए एक योजना के उदाहरण के लिए, लिनक्स के इनोड पॉइंटर संरचना की जांच करें । ध्यान दें कि यह "पॉइंटर" शब्द का थोड़ा अलग उपयोग विशिष्ट है, क्योंकि सूचक आमतौर पर सूचक को इंगित करता है। रैंडम एक्सेस मेमोरी, हार्ड ड्राइव स्पेस नहीं।)
    • गैर-कंप्यूटिंग सादृश्य: हम्मम .... यह थोड़ा मुश्किल है। शायद पुस्तकालय सामग्री को अनुक्रमित करने के लिए डेवी दशमलव प्रणाली समान है? या कोई भी अनुक्रमण प्रणाली, वास्तव में।
    • SiteNook का उत्तर देखें ।
    • कृपया ध्यान दें कि ऊपर दिए गए संकेत के बारे में मेरी व्याख्या कुछ सूक्ष्म विवरणों को बताती है और यकीनन पूरी तरह से सही नहीं है। हालांकि, प्रोग्रामिंग भाषाओं में जिसमें प्रोग्रामर सीधे पॉइंटर्स के साथ काम करते हैं, मैंने जो मानसिक मोड खींचा है वह आमतौर पर व्यावहारिक उद्देश्यों के लिए पर्याप्त है।
  • एक संख्या जो एक कंप्यूटर "प्रदर्शित करने में सक्षम" है (व्यावहारिक उद्देश्यों के लिए) कंप्यूटर के हार्डवेयर या ऑपरेटिंग सिस्टम द्वारा सीमित नहीं है; उनके साथ किसी अन्य पाठ की तरह व्यवहार किया जाता है।

ध्यान दें कि यह "32 बिट" वाक्यांश के लिए व्याख्याओं की एक व्यापक सूची होने का इरादा नहीं है।

अतिरिक्त श्रेय: वास्तव में नंबरों की हड्डियों के दार्शनिक भेद को संख्याओं और कंप्यूटर मेमोरी के आदिम विखंडनों के बीच देखना, इलाज करने वाली मशीनों के बारे में थोड़ा पढ़ना ।


मुझे लगता है कि आईपीवी 4 का संदर्भ इंगित करना था कि आईपीवी 4 पतों की संख्या प्रभावी रूप से हस्ताक्षरित 32-बिट पूर्णांक की लंबाई तक सीमित है, जबकि आईपीवी 6 128 बिट्स का उपयोग करता है और इसलिए परिमाण के कई आदेश हो सकते हैं।
क्लोन्सेक्स

@Clonkex संभवतः, हालांकि यह निश्चित रूप से सवाल नहीं है।
काइल स्ट्रैंड

5

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

पूर्णांक संख्याएं : यह तालिका आपको बिंदु पकड़ने में मदद कर सकती है ( http://msdn.microsoft.com/en-us/library/296az74e.aspx )। यह सी ++ के लिए सीमा को छूता है। उदाहरण के लिए Int64 प्रकार की संख्या -9223372036854775808 से 9223372036854775807 है।

वास्तविक प्रकार की संख्याएं : वास्तविक प्रकार की संख्याओं में फ्लोटिंग पॉइंट और एक्सपोनेंट के साथ मूल्य होते हैं और आप बहुत बड़ी संख्या में प्रवेश कर सकते हैं, लेकिन सीमित सटीकता / सटीकता के साथ। ( http://msdn.microsoft.com/en-us/library/6bs3y5ya.aspx ) उदाहरण के लिए C ++ में LDBL (बड़ा डबल) में अधिकतम घातांक 308 है, इसलिए संभवतः आप परिणाम संख्या दर्ज कर सकते हैं या कर सकते हैं 9.999 x 10^308, इसका मतलब है कि आप करेंगे सैद्धांतिक रूप से 308 (+1) अंक हैं, 9लेकिन इसका प्रतिनिधित्व करने के लिए केवल 15 सबसे महत्वपूर्ण अंकों का उपयोग किया जाएगा, बाकी खो जाएगा, सीमित परिशुद्धता का कारण।

इसके अतिरिक्त, विभिन्न प्रोग्रामिंग भाषाएं हैं और वे संख्या सीमाओं के विभिन्न कार्यान्वयन हो सकते हैं। तो आप सोच सकते हैं कि विशेष अनुप्रयोग C ++ की तुलना में बहुत अधिक (और / या अधिक सटीक / सटीक) संख्या को संभाल सकते हैं।


यह "उत्तर" गलत है: ट्रंकेशन त्रुटियों से बचने के लिए कैलकुलेटर बीसीडी नंबर प्रतिनिधित्व का उपयोग करते हैं। IE 0.1 दशमलव को एक परिमित लंबाई बाइनरी संख्या के रूप में सटीक रूप से प्रस्तुत नहीं किया जा सकता है।
चूरा

5

यदि आप किसी विशिष्ट लिनक्स सिस्टम पर कितने प्रोग्रामों को संभालते हैं, तो बड़ी संख्या में प्रोसेसिंग और आउटपुट के व्यावहारिक उदाहरण को पसंद करेंगे:

libgmp- जीएनयू मल्टीपल प्रिसिजन अरिथमेटिक लाइब्रेरी लिनक्स सिस्टम पर इस काम के लिए सबसे ज्यादा इस्तेमाल की जाने वाली लाइब्रेरी है। 2 ^ 80 को 1000 से गुणा करने का एक सरल उदाहरण:

#include <gmp.h>

// Each large integer uses the mpz_t type provided by libgmp
mpz_t a_large_number;
mpz_t base;
mpz_t result;

// Initalize each variable
mpz_init(a_large_number);
mpz_init(base);
mpz_init(result);

// Assign the number 2 to the variable |base|
mpz_set_ui(base, 2);

// Raise base^80 (2^80), store the result in |a_large_number|
mpz_pow_ui(a_large_number, base, 80);

// Multiply |a_large_number| by 1000, store the result in |result|
mpz_mul_ui(result, a_large_number, 1000);

// Finally, output the result in decimal and hex notation
gmp_printf("decimal: %Zd, hex: %ZX\n", result, result);

तो मूल रूप से यह सामान्य + - * / ऑपरेटरों का उपयोग करने के समान है, बस एक पुस्तकालय के साथ संख्याओं को तोड़ना और उन्हें आंतरिक रूप से कई मशीन शब्द आकार (यानी 32-बिट) संख्याओं के रूप में संग्रहीत करना है। पाठ इनपुट को पूर्णांक प्रकारों में परिवर्तित करने के लिए स्कैनफ़ () प्रकार के कार्य भी हैं।

की संरचना mpz_tवास्तव में स्कॉट चैंबरलेन के दो हाथों का उपयोग करके 6 तक गिनती करने के उदाहरण की तरह है। यह मूल रूप से मशीन शब्द आकार mp_limb_tप्रकारों की एक सरणी है , और जब एक मशीन शब्द में फिट होने के लिए एक संख्या बहुत बड़ी होती है, तो जीएमपी mp_limb_tसंख्या के उच्च / निम्न भागों को संग्रहीत करने के लिए कई का उपयोग करता है ।


5

आपके दिमाग में केवल 10 अलग-अलग अंक होते हैं। आपके दिमाग में 0 से 9. आंतरिक रूप से, यह निश्चित रूप से एक कंप्यूटर की तुलना में अलग तरह से एन्कोड किया गया है।

एक कंप्यूटर बिट्स का उपयोग संख्याओं को एनकोड करने के लिए करता है, लेकिन यह महत्वपूर्ण नहीं है। यह उसी तरह है जिस तरह से इंजीनियरों ने सामान को एन्कोड करने के लिए चुना था, लेकिन आपको इसे अनदेखा करना चाहिए। आप इसके बारे में सोच सकते हैं क्योंकि 32 बिट कंप्यूटर में 4 बिलियन से अधिक विभिन्न मूल्यों का एक अनूठा प्रतिनिधित्व है, जबकि हम मनुष्यों का 10 मिलियन वैल्यू के लिए एक अद्वितीय प्रतिनिधित्व है।

जब भी हमें एक बड़ी संख्या को समझना चाहिए, हम एक प्रणाली का उपयोग करते हैं। सबसे बाईं संख्या सबसे महत्वपूर्ण है। यह अगले की तुलना में 10 गुना अधिक महत्वपूर्ण है।

एक कंप्यूटर जो चार बिलियन अलग-अलग मूल्यों के बीच अंतर करने में सक्षम है, उसी तरह मानों के एक सेट में सबसे बाईं ओर का मूल्य बनाना होगा, उस सेट में अगले मूल्य के रूप में चार बिलियन गुना महत्वपूर्ण होगा। वास्तव में एक कंप्यूटर की बिल्कुल भी परवाह नहीं है। यह संख्या को "महत्व" नहीं देता है। प्रोग्रामर को उसकी देखभाल के लिए विशेष कोड बनाना चाहिए।

जब भी एक मूल्य मानव प्रतीकों में 9 से अधिक अद्वितीय प्रतीकों से अधिक हो जाता है, तो आप एक को बाईं ओर संख्या में जोड़ते हैं।

3+3=6

इस स्थिति में, संख्या अभी भी एक "स्लॉट" के भीतर फिट होती है

5+5=10. This situation is called an overflow.

इसलिए मनुष्य हमेशा पर्याप्त अद्वितीय प्रतीक नहीं होने की समस्या से निपटते हैं। जब तक कंप्यूटर के पास इससे निपटने के लिए कोई सिस्टम नहीं होता, तब तक यह बस 0 लिखना होगा, यह भूलकर कि एक नंबर अतिरिक्त था। सौभाग्य से, कंप्यूटर में एक "अतिप्रवाह झंडा" होता है जो इस मामले में उठाया जाता है।

987+321 is more difficult.

आपने स्कूल में एक विधि सीखी होगी। एक एल्गोरिथ्म। एल्गोरिथ्म काफी सरल है। दो सबसे बाएं प्रतीकों को जोड़कर शुरू करें।

7+1=8, we now have ...8 as the result so far

फिर आप अगले स्लॉट पर जाते हैं और समान जोड़ करते हैं।

8+2=10, the overflow flag is raised. We now have ...08, plus overflow.

चूंकि हमारे पास एक अतिप्रवाह था, इसका मतलब है कि हमें अगले नंबर पर 1 जोड़ना होगा।

9+3=12, and then we add one due to overflow. ...308, and we had another overflow.

जोड़ने के लिए अधिक संख्या नहीं हैं, इसलिए हम बस एक स्लॉट बनाते हैं और 1 डालते हैं क्योंकि ओवरफ्लो झंडा उठाया गया था।

1308

एक कंप्यूटर ठीक उसी तरह से करता है, सिवाय इसके कि मनुष्यों की तरह केवल 10 के बजाय 2 ^ 32 या उससे भी बेहतर 2 ^ 64 अलग-अलग प्रतीक हों।

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

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


में मेरी मन मैं 36 पता है, लेकिन मैं आम तौर पर उनमें से केवल 16 का उपयोग करें।
काइल स्ट्रैंड

'एक कंप्यूटर बिट्स का उपयोग संख्याओं को एनकोड करने के लिए करता है, लेकिन यह महत्वपूर्ण नहीं है।' 32 बिट शब्दों के बारे में पूछने वाले उपयोगकर्ता के संदर्भ में और 2 ^ 32-1 से बड़ी संख्या को संग्रहीत करने के लिए उनका उपयोग कैसे किया जाता है यह बहुत महत्वपूर्ण है।
हॉरमनएचएच

यह महत्वपूर्ण नहीं है कि आप अपने मस्तिष्क की स्मृति में संख्याओं को कैसे एनकोड करते हैं। आपको अभ्यावेदन की एक सीमित संख्या मिली है; अधिकांश ने 10 अलग-अलग प्रतीकों को सीखा है। आपके मस्तिष्क के अंदर, यह संभवतः हजारों न्यूरॉन्स और सिनेप्स के रूप में दर्शाया जाता है। कंप्यूटर में इसे बिजली के रूप में या बिजली की लाइन पर बिजली के रूप में नहीं दिखाया जाता है। प्रोग्रामिंग के नजरिए से - या मैथ्स सीखते समय, यह बिल्कुल भी महत्वपूर्ण नहीं है, केवल उस दुर्लभ मामले को छोड़कर, जहां आप सीधे सीपीयू के विशिष्ट सेट के लिए प्रोग्रामिंग कर रहे हैं। वह 32 बिट बनाम 64 बिट के बारे में पूछ रहा है, व्यक्तिगत बिट नहीं।
फ्रोडेबोरली

3

क्योंकि आप एक संख्या (जहां तक ​​कंप्यूटर का संबंध है) प्रदर्शित नहीं कर रहे हैं, लेकिन एक स्ट्रिंग , या अंकों का एक क्रम। ज़रूर, कुछ ऐप (जैसे कैलकुलेटर, मुझे लगता है), जो संख्याओं से निपटते हैं, इस तरह की संख्या को संभाल सकते हैं, मुझे लगता है। मुझे नहीं पता कि वे कौन सी चाल का उपयोग करते हैं ... मुझे यकीन है कि कुछ अन्य, अधिक विस्तृत उत्तर कवर करते हैं।


0

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

जब आप दो नंबर जोड़ते हैं जो 8 बिट होते हैं, तो सबसे बड़ी संख्या आप प्राप्त कर सकते हैं (0xFF + 0xFF = 1FE)। वास्तव में, यदि आप दो संख्याओं को 8-बिट से गुणा करते हैं, तो सबसे बड़ी संख्या जो आप प्राप्त कर सकते हैं (0xFF * 0xFF = 0xFE01) अभी भी 16 बिट्स है, 8-बिट्स के दो बार।

अब, आप यह मान सकते हैं कि एक एक्स-बिट प्रोसेसर केवल एक्स-बिट्स का ट्रैक रख सकता है। (उदाहरण के लिए, एक 8-बिट प्रोसेसर केवल 8 बिट्स का ट्रैक रख सकता है।) यह सही नहीं है। 8-बिट प्रोसेसर 8-बिट विखंडू में डेटा प्राप्त करता है। (ये "विखंडू" आमतौर पर एक औपचारिक शब्द है: एक "शब्द"। 8-बिट प्रोसेसर पर, 8-बिट शब्दों का उपयोग किया जाता है। 64-बिट प्रोसेसर पर, 64 बिट शब्दों का उपयोग किया जा सकता है।)

इसलिए, जब आप कंप्यूटर को 3 बाइट्स देते हैं:
बाइट # 1: MUL इंस्ट्रक्शन
बाइट # 2: हाई ऑर्डर बाइट्स (जैसे, 0xA5)
बाइट # 3: लोअर ऑर्डर बाइट्स (जैसे, 0xCB)
कंप्यूटर एक परिणाम उत्पन्न कर सकता है 8 बिट्स से अधिक है। सीपीयू इस तरह के परिणाम उत्पन्न कर सकता है:
0100 0000 0100 0010 xxxx xxxx xxxx xxxx 1101 0111
aka:
0x4082xxxxD7
अब, मैं आपको यह समझाता हूं कि:
0x का अर्थ है कि निम्नलिखित अंक का मतलब हेक्साडेसिमल है।
मैं "40" पर और अधिक विस्तार से चर्चा करूंगा।
82 "ए" रजिस्टर का हिस्सा है, जो 8 बिट्स की एक श्रृंखला है।
xx और xx दो अन्य रजिस्टरों का हिस्सा हैं, जिन्हें "B" रजिस्टर और "C" रजिस्टर का नाम दिया गया है। कारण यह है कि मैंने उन बिट्स को शून्य या लोगों से नहीं भरा है, यह है कि एक "एडीडी" निर्देश (सीपीयू को भेजा गया) उन बिट्स को निर्देश द्वारा अपरिवर्तित कर सकता है (जबकि अन्य बिट्स मैं इस उदाहरण में उपयोग कर सकता हूं) बदल जाओ (कुछ ध्वज बिट्स को छोड़कर)।
डी 7 अधिक बिट्स में फिट होगा, जिसे "डी" रजिस्टर कहा जाता है।
एक रजिस्टर सिर्फ स्मृति का एक टुकड़ा है। रजिस्टरों को सीपीयू में बनाया जाता है, इसलिए सीपीयू रैम स्टिक पर मेमोरी के साथ बातचीत करने की आवश्यकता के बिना रजिस्टरों तक पहुंच सकता है।

तो 0xA5 गुणा 0xCB का गणितीय परिणाम 0x82D7 है।

अब, बिट्स A और B रजिस्टरों के बजाय A और D रजिस्टरों या C और D रजिस्टरों में विभाजित क्यों हो गए? खैर, एक बार फिर, यह एक नमूना परिदृश्य है जिसका मैं उपयोग कर रहा हूं, इसका मतलब अवधारणा में वास्तविक विधानसभा भाषा (इंटेल x86 16-बिट, इंटेल 8080 और 8088 और कई नए सीपीयू द्वारा उपयोग किया जाता है) के समान है। कुछ सामान्य नियम हो सकते हैं, जैसे कि "सी" रजिस्टर आमतौर पर गिनती के संचालन (छोरों के लिए विशिष्ट) के लिए एक सूचकांक के रूप में इस्तेमाल किया जा रहा है, और "बी" रजिस्टर का उपयोग ऑफ़सेट का ट्रैक रखने के लिए किया जा रहा है जो मेमोरी स्थानों को निर्दिष्ट करने में मदद करते हैं। तो, "ए" और "डी" कुछ सामान्य अंकगणितीय कार्यों के लिए अधिक सामान्य हो सकते हैं।

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

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

उदाहरण के लिए, आपके पास कई ADD निर्देश हो सकते हैं। एक एडीडी निर्देश ए रजिस्टर और डी रजिस्टर में परिणामों के 16 बिट्स को स्टोर कर सकता है, जबकि एक अन्य निर्देश ए रजिस्टर में केवल 8 कम बिट्स स्टोर कर सकता है, डी रजिस्टर को अनदेखा कर सकता है, और ओवरफ्लो बिट निर्दिष्ट कर सकता है। फिर, बाद में (मुख्य रैम में ए रजिस्टर के परिणामों को संग्रहीत करने के बाद), आप एक और एडीडी निर्देश का उपयोग कर सकते हैं जो रजिस्टर में 8 उच्च बिट्स (संभवतः ए रजिस्टर) को संग्रहीत करता है, चाहे आपको एक अतिप्रवाह ध्वज का उपयोग करने की आवश्यकता हो। केवल उस गुणन निर्देश पर निर्भर करें जिसका आप उपयोग करते हैं।

(आम तौर पर "अंडरफ्लो" ध्वज भी होता है, यदि आप वांछित परिणाम में फिट होने के लिए बहुत अधिक घटाते हैं।)

बस आपको यह दिखाने के लिए कि जटिल चीजें कैसे मिलीं:
इंटेल 4004 एक 4-बिट सीपीयू
था इंटेल 8008 एक 8-बिट सीपीयू था। इसमें ए, बी, सी और डी नाम के 8-बिट रजिस्टर थे
। इंटेल 8086 एक 16-बिट सीपीयू था। इसमें AX, BX, CX और DX नाम के 16-बिट रजिस्टर थे।
Intel 80386 एक 32-बिट CPU था। इसमें EAX, EBX, ECX और EDX नाम के 32-बिट रजिस्टर थे।
इंटेल x64 सीपीयू में RAX, RBX, RCX और RDX नाम के 64-बिट रजिस्टर हैं। X64 चिप्स 16-बिट कोड (कुछ ऑपरेटिंग मोड में) चला सकते हैं, और 16-बिट निर्देशों की व्याख्या कर सकते हैं। ऐसा करते समय, AX रजिस्टर बनाने वाले बिट्स EAX रजिस्टर बनाने वाले बिट्स में से आधे होते हैं, जो RAX रजिस्टर बनाने वाले बिट्स में से आधे होते हैं। तो कभी भी आप AX का मान बदलते हैं, तो आप EAX और RAX को भी बदल रहे हैं, क्योंकि AX द्वारा उपयोग की जाने वाली बिट्स RAX द्वारा उपयोग किए जाने वाले बिट्स का हिस्सा हैं। (यदि आप EAX को 65,536 से अधिक के मान से बदलते हैं, तो 16 बिट्स अपरिवर्तित हैं, इसलिए परिवर्तित नहीं होगा। यदि आप EAX को ऐसे मान से परिवर्तित करते हैं, जो 65,536 से अधिक नहीं है, तो यह AX को भी प्रभावित करेगा। ।)

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

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


मुझे लगता है कि मेरे उत्तर के टुकड़े इस प्रश्न के कुछ अन्य उत्तरों को फिर से जोड़ते हैं। हालाँकि, इस पर ध्यान नहीं दिया गया था जब मैंने पहली बार सामग्री लिखी थी जब से मैंने एक और प्रश्न के लिए लिखा था। इसके अलावा, जब मैं सी भाषा में कुछ कोड सहित अनिमिज्म के उत्तर की सराहना करता हूं , तो मुझे लगा कि मेरी सामग्री ने कुछ विवरण प्रदान किए हैं कि असेंबली कैसे काम करती है, जो सीपीयू की वास्तविक क्रियाओं / डिजाइन के करीब है। इसलिए मेरा उत्तर बेहतर उत्तर होने की कोशिश नहीं कर रहा है जो अन्य सभी की तुलना में "बेहतर" है, लेकिन सिर्फ पूरक है; कुछ अतिरिक्त अंतर्दृष्टि के साथ एक और परिप्रेक्ष्य जोड़ना
TOOGAM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.