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


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

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

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


365


मूल


सवाल दोषपूर्ण है। 32-बिट मशीनें 2 ^ 32 से अधिक संख्याओं को संभाल सकती हैं। वे इसे 'लंबे' और इतने पर, हर समय करते हैं। वे केवल एक रजिस्टर में 2 ^ 32 तक स्टोर कर सकते हैं, लेकिन सॉफ्टवेयर को इस समस्या को बाईपास करने के लिए लिखा गया है। कुछ आधुनिक भाषाओं में किसी दिए गए नंबर की लंबाई के साथ कोई समस्या नहीं होती है। - JFA
प्रश्न के तकनीकी पहलुओं पर कृपया विषय, विनम्र, और प्रासंगिक पर टिप्पणियां रखें। लगभग 50 मजाक टिप्पणियों को पहले ही हटा दिया जाना था, और हम पोस्ट को लॉक करने से बचना चाहते हैं। धन्यवाद। - nhinkle♦
यह सवाल इस तरह से लिखा गया है कि थोड़ा सा मैला है। 1000000000000 नंबर "लिखने" और "प्रदर्शन" से आपका क्या मतलब है? जब आपने प्रश्न लिखा था तो आपने 1000000000000 नंबर लिखा था, और आपका वेब ब्राउज़र इसे ठीक दिखाता है, मुझे लगता है, लेकिन यह किसी भी व्यक्ति के लिए अजीब नहीं होना चाहिए जिसने कभी पहले कंप्यूटर का उपयोग किया हो। सवाल मुफ्त व्याख्या के लिए पूछता है। - HelloGoodbye
मानव चेतना का अनुमान है कि लगभग 50 बिट्स (मैंने कहीं पढ़ा है)। तो सवाल यह नहीं है कि "मैं कैसे लिख सकता हूं 10^9 मेरे पीसी के बिना दुर्घटनाग्रस्त? "लेकिन बल्कि" मैं कैसे लिख सकता हूं 10^(18) मेरे मस्तिष्क के दुर्घटनाग्रस्त होने के बिना? " - Hagen von Eitzen
32 बिट कंप्यूटर केवल 2 ^ 32 - 1. 2 ^ 32 - 1 तक 2,S77,483,647 तक के बराबर नहीं हैं ... 300 अप-वोट और किसी को भी यह एहसास नहीं हुआ? - Koray Tugay


जवाब:


मैं आपको एक अलग पूछकर अपने प्रश्न का उत्तर देता हूं:

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

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


785



मजेदार, @ कोडनाम। फिर आप 32 या उससे अधिक तक अपनी अंगुलियों पर कैसे भरोसा करते हैं (यानी एक बार 2 ^ 5 समाप्त हो गया है)? ;) किसी के दूसरे हाथ में जाने का समानता अच्छा है ... भले ही बाइनरी किसी दूसरे हाथ में जाने की आवश्यकता को देरी हो। मैं क्या देखना चाहता हूँ बाइनरी में आगे गिनने के लिए पैडियल निपुणता के साथ 1,024 या उससे अधिक की गिनती है - 1,048,575 तक! :) यह शायद बेटीबोर्ड की शक्ति के 20-बिट्स है। : पी - J0e3gan
कृपया इस उत्तर के तकनीकी पहलुओं पर चर्चा करने के लिए विषय-वस्तु और प्रासंगिक टिप्पणियां रखें।इस जवाब से 60 से अधिक मजाक टिप्पणियां पहले ही हटा दी गई हैं, और हम पोस्ट को लॉक करने से बचना चाहते हैं। - nhinkle♦
@ कोडनाम- आसान, आप एक उंगली को एक स्टैक पॉइंटर के रूप में असाइन करते हैं। एक बार जब आप उंगलियों से बाहर निकलते हैं तो आप रैक में राशि जोड़ते हैं और गिनती को पुनरारंभ करते हैं। - Makach
आपने उसे कहाँ से सीखा, @ कोडनाम? मैंने इसे फ्रेडरिक पोहल से पहले सुना, उदाहरण के लिए देखें यहाँ hjkeen.net/halqn/f_pohl3.htm - Zane
मुझे लगता है कि यह प्रासंगिक प्रश्न का उत्तर नहीं है। @ Bigbio2002 द्वारा उत्तर सही है। यहां "1000000000000" एक संख्या नहीं है बल्कि एक टेक्स्ट है, जैसे "adsfjhekgnoregrebgoregnkevnregj"। आप जो कह रहे हैं वह सच है, लेकिन मुझे दृढ़ता से लगता है कि यह सही जवाब नहीं है। और इतने सारे अपवॉट देखने के लिए ... - Master Chief


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

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


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

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


398



दरअसल यह ज्यादातर सही है लेकिन काफी नहीं है। एक 32 बिंदु फ्लोटिंग पॉइंट नंबर 1000000000000 का सटीक रूप से प्रतिनिधित्व करने में सक्षम होने की संभावना नहीं है। यह वांछित संख्या के बहुत करीब एक संख्या का प्रतिनिधित्व करेगा लेकिन वास्तव में नहीं। - Tim B
@ टीआईएमबी: क्या आपने दशमलव 32 प्रारूप के बारे में सुना है? यह आईईईई 754-2008 मानक का हिस्सा है। यह प्रारूप इस संख्या के सही प्रतिनिधित्व करने में सक्षम है :) - V-X
सच है, वह कर सकते हैं। हालांकि, प्रारूप का मतलब लोगों का मतलब नहीं है जब वे "फ्लोट" कहते हैं, जो आमतौर पर 32 बिट फ्लोटिंग पॉइंट नंबर को संदर्भित करता है और मौजूदा कंप्यूटरों में मानक फ़्लोटिंग पॉइंट प्रोसेसर द्वारा उपयोग किया जाता है। - Tim B
वास्तव में @ टीआईएमबी। फ्लोट 32 के रूप में प्रदर्शित किया जा सकता है कि निकटतम संख्या 99 99 99 995904 है - greggo
@ टीआईएमबी: लेकिन एक 64-बिट फ्लोटिंग-पॉइंट नंबर आसानी से प्रतिनिधित्व कर सकता है 1000000000000 ठीक ठीक। यह 10 ^ 12 है, या 2 ^ 12 * 5 ^ 12; 5 ^ 12 में मंटिसा के 28 बिट्स की आवश्यकता है। - Keith Thompson


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

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

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

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

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

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

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

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

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

  • हमारे काल्पनिक कंप्यूटर बाइनरी के बजाय दशमलव का उपयोग करता है
  • एक बाइट संख्या पकड़ सकता है 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-बिट सीपीयू के लिए दो -32-बिट-वर्ड-नंबरों के लिए समर्थन जोड़ना प्रभावी ढंग से 64-बिट CPU बनाता है (अब यह 64-बिट संख्याओं को मूल रूप से संचालित कर सकता है, है ना?)।

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

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

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


190



आपका जवाब बल्कि संवेदनापूर्वक पढ़ता है। ओपी स्पष्ट रूप से संख्या के बारे में बात कर रहा है, पाठ नहीं: large as the number 1 trillion (1000000000000)। इसके अलावा, आप लगभग बात कर रहे हैं मनमाना-परिशुद्धता अंकगणितीय, लेकिन आप जो भी कह रहे हैं उसके लिए आप वास्तव में किसी भी शब्द का उल्लेख नहीं करते .... - MirroredFate
"1 ट्रिलियन" भी एक स्ट्रिंग है - Elzo Valugi
@ElzoValugi यह है। मुझे संख्या संख्या का प्रतिनिधित्व करने वाली स्ट्रिंग के विपरीत, अमूर्त संख्या की अवधारणा को प्रस्तुत करने का कोई तरीका ढूंढना पड़ा। मेरा मानना ​​है कि "1 ट्रिलियन" ऐसा करने के लिए एक बेहतर और कम अस्पष्ट तरीका है (उत्तर में सबूत देखें)। - gronostaj
@ मिररफ़ेट मैं असहमत हूं 'स्पष्ट रूप से संख्या के बारे में बात कर रहा है'। ओपी कहते हैं 'ठीक दिखता है', जो स्पष्ट रूप से है मेरे लिए '1000000000000' पाठ के बारे में बात कर रहा है ... - Joe
@ यैनबेन 'ए' एक चरित्र है और संख्या नहीं है। '?' एक चरित्र है और संख्या नहीं है। '1' एक चरित्र है और एक संख्या भी नहीं है। अक्षर सिर्फ प्रतीकों हैं। वे अंक या संख्या का प्रतिनिधित्व कर सकते हैं, लेकिन निश्चित रूप से वे संख्या नहीं हैं। '1' एक, दस, सौ, हजार और इतने पर खड़ा हो सकता है, यह सिर्फ एक प्रतीक है जो एक अंक के लिए खड़ा है जो एक संख्या या उसका हिस्सा हो सकता है। '10' (पात्रों की स्ट्रिंग) का अर्थ दो या आठ या दस या सोलह आदि हो सकता है, लेकिन जब आप कहते हैं कि आपके पास दस सेब हैं, तो आप दस नंबर का उपयोग कर रहे हैं और हर कोई जानता है कि आपका क्या मतलब है। पात्रों और संख्याओं के बीच एक बड़ा अंतर है। - gronostaj


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

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

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

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

क्या होगा यदि आप नकारात्मक होना चाहते हैं? intuitively, हस्ताक्षरित पूर्णांक खेल का नाम है। सम्मेलन से सभी मूल्य आवंटित करना है -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);

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


40



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


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

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

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

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


31





यह सब आपके प्रश्न में है।

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

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

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


24





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



15



विवरण के अलावा अच्छा जवाब - पता स्थान के 16 बिट्स ने आपको 64 केबी, 32 एमबी नहीं दिया, और 286 जैसी मशीनों में 24-बिट पते (16 एमबी के लिए) थे। इसके अलावा, 64-बिट पते के साथ, आप टेराबाइट्स से काफी आगे जाते हैं - 16 एक्साबाइट्स की तरह - टेराबाइट्स वर्तमान पीढ़ी के मदरबोर्ड / सीपीयू की तरह सीमाओं के आसपास है - पते का आकार नहीं। - Phil
32-बिट मशीन शब्द आकार को संदर्भित करता है, स्मृति स्मृति नहीं। फिल के अनुसार, 286 16-बिट सीपीयू था लेकिन मेमोरी सेगमेंटेशन के माध्यम से संबोधित करने के लिए 24 बिट्स का इस्तेमाल किया गया। x86 CPUs 32-बिट हैं, लेकिन 36-बिट एड्रेसिंग का उपयोग करें। देख पीएई। - gronostaj
@ ग्रोनोस्टाज अच्छी x86 में 386 से पेंटियम तक 32-बिट एड्रेसिंग है। - Ruslan
उपरोक्त क्योंकि यह केवल एकमात्र सही उत्तर है - 32 बिट 32 बिट अंकगणित नहीं, 32 बिट मेमोरी एड्रेसिंग को संदर्भित करता है। - user1207217
@ उपयोगकर्ता 1207217: ?? तो उदाहरण के लिए आपके तर्क के मुताबिक Z80 या 8080 16-बिट प्रोसेसर हैं (16-बिट मेमोरी एड्रेसिंग और मेमोरी बस की वजह से)? - pabouk


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

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

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


13



मैंने डाउनवॉट नहीं किया है, लेकिन आपके उत्तर के साथ कई समस्याएं हैं I 1 ASCII में 0x31 है, 0x1 नहीं। 1 जीबी = 1024 ^ 3 बी आईपीवी 4 वैड का आविष्कार 32-बिट CPUs से पहले पेश किया गया था, इसलिए यह कहकर कि 32-बिट पूर्णांक में पते को संग्रहित किया गया था ओपी के प्रश्न के साथ संघर्ष में है। और अंततः आईपीवी 6 128-बिट पते का उपयोग कर रहा है, 64-बिट नहीं। - gronostaj


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

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

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

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


12



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


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

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

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

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

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


10





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

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

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

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

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

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

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


10