2011-11-18 13 views
8

मैं सिर्फ बाइनरी और बाइट्स के बारे में सीख रहा हूं। मैं समझता हूं कि 8 बिट एक बाइट बनाते हैं और एक बाइट में 256 संभावनाएं हो सकती हैं। जिस चीज़ के बारे में मैं उलझन में हूं वह यह है:बाइट क्या है और बाइनरी के साथ क्या करना है?

byte[] b = new byte[] { 85, 85, 67, 75 }; 

85 या उपरोक्त संख्याओं में से किसी को बाइनरी के साथ क्या करना है। बस कुछ ऐसा है जो मेरे दिमाग में पूरी तरह से क्लिक नहीं कर रहा है।

+12

"वहाँ कोई सवाल ही नहीं बहुत आसान है"। "कोई सवाल बहुत आसान नहीं है"। "कोई सवाल बहुत आसान नहीं है"। यह काम नहीं कर रहा है। –

+3

'85' के पास 'बाइनरी' से कोई लेना देना नहीं है, क्योंकि यह' दशमलव' है। '85 आधार 10' ==' 1010101 आधार 2'। यह सिर्फ – Rob

+0

का प्रतिनिधित्व करने का एक तरीका है क्या कोड कोड केवल बाइट्स की सरणी घोषित नहीं करता है और प्रत्येक संख्या एक अलग बाइट का प्रतिनिधित्व करती है? – Ari

उत्तर

12

बाइनरी यह है कि कंप्यूटर के अंदर चीजें कैसे संग्रहीत की जाती हैं। ऑन और ज़ीरो, चालू और बंद, सत्य और झूठी, विद्युतीय प्रवाह की उपस्थिति या अनुपस्थिति। This Wikipedia article इसे एक काफी संपूर्ण उपचार देता है।

आपके उदाहरण में "85" जैसे एक प्रतिनिधित्व यह है कि कैसे एक बाइट स्वरूपित मानव पाठकों के रूप में हमारी सुविधा के लिए है। इसे हेक्साडेसिमल (बेस 16) में "55" के रूप में स्वरूपित किया जा सकता है, ओक्टल (बेस 8) में बाइनरी में "12501" के रूप में "12501" के रूप में "12501" या बेस -84 में "11" के रूप में यदि आप इतने इच्छुक थे। सब एक ही बात है।

+5

आप के विरोधाभास के लिए खेद है, लेकिन शून्य विद्युत प्रवाह की अनुपस्थिति नहीं है, यह केवल इसकी एक अलग राशि है। ऐसा नहीं है कि ओपी शायद इसके बारे में परवाह करता है। –

+1

@ क्रिस: बेशक ... उच्च और निम्न तर्क राज्य। मैं सरलीकृत पर। –

+1

+1 यह प्रश्न सिर्फ विकिपीडिया (एमएसडीएन नहीं) के लिए चिल्लाता है – sq33G

3

सी # में byte केवल 8-बिट पूर्णांक मान है। उपर्युक्त में, आप एक सरणी में 4 संख्याओं का प्रतिनिधित्व कर रहे हैं - यदि आप int का उपयोग करते हैं तो यह वास्तव में अलग नहीं होगा, सिवाय इसके कि संख्या स्मृति में कुल स्थान का 1/4 वां लेती है।

वास्तव में बाइनरी डेटा के लिए उपयोग किए जाने वाले सबसे आम प्रतिनिधित्व के अलावा "बाइनरी" के साथ इसका कोई लेना-देना नहीं है। ऐसा इसलिए है क्योंकि अधिकांश सिस्टम एक समय में एक "बाइट" के बारे में बात करते हैं, जो डेटा का 8 बिट ब्लॉक है। इस प्रकार, यदि आप कुछ ऐसा कर रहे हैं जो कच्चे बाइनरी जानकारी के साथ काम करता है तो एक बाइट इस डेटा का प्रतिनिधित्व करने का एक आम तरीका है।

BitConverter कक्षा में बाइट एरे से दूसरे प्रकार और पीछे जाने के लिए दिनचर्या है। उदाहरण के लिए, यह take 4 bytes and turn it into an Int32 मान या अन्य तरीकों से जा सकता है। याद रखें - संग्रहीत सभी डेटा केवल स्मृति है - आप केवल एक विशिष्ट क्रम में बिट्स (1 और 0 के) का अनुक्रम सहेज रहे हैं, और सिस्टम इस डेटा को एक विशिष्ट तरीके से व्याख्या कर रहा है।

3

ये केवल संख्याएं हैं। उनके पास बाइनरी प्रति से कोई लेना देना नहीं है। आप बाइनरी में उन्हें लिख सकते हैं, हालांकि, यदि आपने चुना है - उदाहरण के लिए, 75 = 01001011 बेस 2 में

byte, तो, केवल एक डेटा प्रकार है जो 256 संभावित मानों में से एक को पकड़ सकता है। आम तौर पर इसे या तो 0 से 255, या 8 बाइनरी अंकों (यानी, 8 चालू/बंद मान) के रूप में व्याख्या किया जाता है। ये एक ही चीज़ को देखने के सिर्फ दो तरीके हैं।

0

सरणी में से प्रत्येक संख्या 256 से कम है। वे बाइनरी में बाइट में परिवर्तित हो जाते हैं। यह सिर्फ उनका दशमलव प्रतिनिधित्व है।

3

वह कथन बाइट्स की एक सरणी घोषित करता है, और इसे 4 तत्वों को असाइन करता है - उनमें से प्रत्येक एक बाइट (सिद्धांत में!) आकार में होता है। वास्तविक मूल्य - 85, 86, 67, 75 - उस सरणी में संग्रहीत प्रत्येक मान हैं जो एक बाइट में फिट हो सकते हैं। आपके कोड नमूने में, वे मान दशमलव रूप में दर्शाए जाते हैं। अपने कोड निष्पादन योग्य के रूप में अनुवाद किया है एक बार, उन मूल्यों को अंततः उनके बाइनरी अभ्यावेदन में आपके कंप्यूटर के द्वारा देखा जाएगा, रजिस्टर करने के लिए रजिस्टर से के बारे में bandied, धक्का दे दिया, पॉप, और संचित, आदि

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

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

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

+0

... और मैं हमेशा इस तथ्य के बाद चीजें देखता हूं कि मैं दूसरों के सामने उल्लेख करना चाहता हूं, लेकिन मैं फिर से हार जाता हूं: स्टोरेज दक्षता के लिए निचोड़ना एक और कारण है कि आप टाइप int के बजाय टाइप बाइट का उपयोग कर सकते हैं। – Christopher

+0

आपको इस तरह की अच्छी समझ कैसे मिली? ऑनलाइन या स्कूल में? –

+1

निश्चित रूप से स्कूल नहीं - मैं हाईस्कूल से बाहर निकल गया, और आगे नहीं चला। ऑनलाइन नहीं; किताबें, प्रयोग, कठोर दस्तक, और कई रातें सिर्फ मुझे, मेरे कंपाइलर, और पाइपिंग-गर्म कॉफी की विशाल मात्रा। अपने आप को एक व्यावहारिक ढूंढें - और दबाने! - कुछ भी प्रोग्राम करने की जरूरत है। यदि आवश्यकता पूरी तरह से सख्त है, और समय सीमा पहली बात है, तो आप बहुत अच्छी असली जल्दी प्राप्त कर सकते हैं। :) – Christopher

4

85 एक संख्या का दशमलव है (यानी "आधार 10") positional notation। इसका मतलब यह है:

8 *^1 + 5 *^0

= 8 * 10 + 5 * 1

= 80 + 5

= 85

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

तो, जब आप अपने कार्यक्रम के स्रोत कोड में दशमलव 85 लिख सकते हैं (यह मनुष्य के लिए और अधिक प्राकृतिक रखने के लिए), यह अंत में द्विआधारी 1,010,101 है, जो बराबर होती है के रूप में कंप्यूटर के भीतर प्रतिनिधित्व हो जाता है ...

1 *^6 + 0 *^5 + 1 *^4 + 0 *^3 + 1 *^2 + 0 *^1 + 1 *^0

= 1 * 64 + 0 * 32 + 1 * 16 + 0 * 8 + 1 * 4 + 0 * 2 + 1 * 1

= 64 + 16 + 4 + 1

= 85


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

  • 10 (दशमलव) = 1010 (बाइनरी)
  • 100 (दशमलव) = 1,100,100 (बाइनरी)
  • 1000 (दशमलव) = +१११११०१००० (बाइनरी)
  • आदि ...

कभी कभी, यह एक अंकीय प्रणाली है कि द्विआधारी के साथ "संरेखित", इस तरह के रूप octal (एक अष्टाधारी अंकों वास्तव में 3 बाइनरी अंकों है) या hexadecimal (एक हेक्साडेसिमल डिजिट वास्तव में 4 बाइनरी अंकों है) का उपयोग करने के लिए सुविधाजनक है।

महत्वपूर्ण बात यह है कि इन सभी प्रणालियों को अंततः कंप्यूटर के भीतर बाइनरी के रूप में दर्शाया जाता है।

अतिरिक्त नोट पर: "हेक्सा-दशमलव" "sexa -decimal" हुआ करता था, लेकिन जाहिरा तौर पर कुछ कड़ा संवेदनशीलता नाराज;)

संबंधित मुद्दे