आप दशमलव को बाइनरी और बाइनरी को दशमलव में बदल सकते हैं। लेकिन आप "256" संख्या का प्रतिनिधित्व कैसे कर सकते हैं?
255 = 11111111
1 बाइट में 8 से अधिक बाइनरी अंक (बिट्स) नहीं हो सकते हैं। यह कैसे हो सकता है?
आप दशमलव को बाइनरी और बाइनरी को दशमलव में बदल सकते हैं। लेकिन आप "256" संख्या का प्रतिनिधित्व कैसे कर सकते हैं?
255 = 11111111
1 बाइट में 8 से अधिक बाइनरी अंक (बिट्स) नहीं हो सकते हैं। यह कैसे हो सकता है?
जवाबों:
आप द्विआधारी में 256 का प्रतिनिधित्व करने का तरीका पूछते हैं, लेकिन मैं अनुमान लगा रहा हूं कि आप लोग क्यों कहते हैं कि बाइट्स 256 अलग-अलग संख्याओं को संग्रहीत कर सकते हैं, जब सबसे बड़ी संख्या यह स्टोर 255 है। जैसा कि क्लाउडीप ने कहा, कंप्यूटर 0 पर गिनना शुरू करते हैं, इसलिए 0 वास्तव में पहली संख्या है, 1 दूसरी है, 2 तीसरी है ... 255 256 वीं है।
इसके अलावा, 11111111 अहस्ताक्षरित बाइट्स के लिए केवल 255 है। जब आपके पास एक हस्ताक्षरित बाइट (एक हस्ताक्षरित मूल्य एक है जो नकारात्मक मूल्यों को पकड़ सकता है), 11111111 वास्तव में -1 है। Http://en.wikipedia.org/wiki/Two_complement देखें । जिस तरह से दो के पूरक काम करते हैं, एक नकारात्मक संख्या को सकारात्मक संख्या में परिणाम जोड़ते हैं। 0. जैसा कि अन्य लोगों ने कहा है, अगर हम 11111111 में थोड़ा जोड़ते हैं, और आपका डेटाटाइप केवल 8 बिट्स का समर्थन कर सकता है, तो अंतिम बिट ओवरफ्लो करेगा और आपको छोड़ देगा 0. हस्ताक्षरित बाइट के लिए, मान -128 से 127 तक होता है। 128 नकारात्मक संख्या + 0 + 127 सकारात्मक संख्या = 256 संख्या।
हस्ताक्षरित मूल्यों के लिए, पहला बिट "साइन" बिट है। यदि यह बिट सेट है, तो संख्या ऋणात्मक है। 10000000 नकारात्मक है, 01000000 धनात्मक है, 11111111 ऋणात्मक है, 01111111 धनात्मक है ...
यदि आप विंडोज़ पर हैं (शायद मैक के पास भी है), तो आप कैलकुलेटर को खोल सकते हैं, इसे प्रोग्रामर मोड पर स्विच कर सकते हैं, सोबते चुन सकते हैं, और बिट्स के साथ चारों ओर खेलकर देख सकते हैं कि वे अपने दशमलव अभ्यावेदन से कैसे संबंधित हैं।
जैसा कि आप पहले से ही जानते हैं, 255d (दशमलव) 11111111b (बाइनरी) के बराबर है। यदि आप अब मूल्य में 1 जोड़ना चाहते हैं, तो दो संभावनाएँ हैं:
या तो आपके पास केवल 8 बिट्स हैं। इस मामले में, एक तथाकथित अतिप्रवाह होता है। तो "आंतरिक रूप से", 1 को 100000000b (9 बिट्स में 256d) के परिणामस्वरूप जोड़ा जाएगा। लेकिन क्योंकि आपके पास केवल 8 बिट्स उपलब्ध हैं, निचले 8 बिट्स "वापस" हो जाएंगे। तो आप 0d = 0b के साथ समाप्त होते हैं (एक विशेष अतिप्रवाह ध्वज को अधिकांश कंप्यूटर आर्किटेक्चर पर सेट किया जाएगा, बस एक नोट के रूप में।)
इसे अपनी उंगलियों से गिनने के समान समझें। कल्पना कीजिए कि आपकी उंगलियां 9d दिखाती हैं। अब आप एक और उंगली जोड़ते हैं। आप 10 से अंत करते हैं। यदि आप एक और भी जोड़ना चाहते हैं तो आप क्या करते हैं?
दूसरी संभावना यह है कि आपके पास 8 से अधिक बिट उपलब्ध हैं। इस स्थिति में आप बस शुरुआत में एक और अंक जोड़ सकते हैं और परिणाम वास्तव में 100000000b = 256d होगा।
एक बाइट सबसे छोटी "इकाई" है जिसे एक कंप्यूटर सिस्टम (मेमोरी सिस्टम) संबोधित कर सकता है। इसका मतलब यह है कि यदि आप केवल एक बिट जानना चाहते हैं, तो आपको एक पते से आपको एक निश्चित बाइट देने के लिए मेमोरी सिस्टम से पूछना होगा और फिर आपको उस बिट के मूल्य का पता लगाना होगा जो आपकी खुद में रुचि रखते हैं।
लेकिन जिस तरह से 8 बिट्स एक बाइट बनाते हैं, उसी तरह बड़े डेटाटिप्स भी हैं। 2 बाइट्स एक शब्द (16 बिट), दो शब्द (चार बाइट, 32 बिट) एक डबल शब्द बनाते हैं। और आजकल मानक 64 बिट आर्किटेक्चर में भी 64 बिट डेटाैटिप्स (तथाकथित रजिस्टर्स) हैं।
आप इसे थोड़ा बदलाव ऑपरेशन ( बाइनरी प्रतिनिधित्व की समाप्ति के आधार पर बाएं या दाएं ) द्वारा प्रतिनिधित्व कर सकते हैं । उदाहरण के लिए यह एक लाइनर एक बड़े एंडियन प्रतिनिधित्व के लिए काम करता है (सबसे महत्वपूर्ण बाइट पहले):
1 << 8
एक अहस्ताक्षरित बाइट केवल 256 मान रख सकता है जिसमें [0 - 255] की सीमा शामिल है। मान 256 के लिए आपको एक डेटा प्रकार का उपयोग करने की आवश्यकता होगी जो एक बड़ा मान रखने में सक्षम है, उदाहरण के लिए एक पूर्णांक।