2012-01-30 12 views
13

इस कोड:बिटअरे रिटर्न रिटर्न बिट्स के आसपास गलत तरीके से करता है?

11100000 

यह दूसरी तरह के आसपास नहीं होना चाहिए:

BitArray bits = new BitArray(new byte[] { 7 }); 
foreach (bool bit in bits) 
{ 
    Console.WriteLine(bit ? 1 : 0); 
} 

मेरा पीछा उत्पादन देता है? इस तरह:

00000111 

मुझे पता है कि वहां थोड़ा और बड़ा एंडियन है, हालांकि ये शब्द केवल बाइट्स की स्थिति का संदर्भ लेते हैं। जहां तक ​​मुझे पता है, वे बिट्स को प्रभावित नहीं करते हैं।

उत्तर

9

documentation for BitArray कहता है:

सरणी में पहली बाइट का प्रतिनिधित्व करता है बिट्स 0 के माध्यम से 7, दूसरा बाइट बिट्स 8 से 15 के माध्यम से, और इतने पर प्रतिनिधित्व करता है। "बाइट [0] & 1" को दर्शाता सा 0, "बाइट [0] & 2" का प्रतिनिधित्व करता है बिट 1, "बाइट [0] & 4" बिट का प्रतिनिधित्व करता है: कम से कम महत्वपूर्ण प्रत्येक बाइट के बिट न्यूनतम सूचकांक मूल्य का प्रतिनिधित्व करता 2, और इतने पर।

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

उदाहरण के लिए

, शब्द 01011010 00101101 (90 45) के रूप में सूचीबद्ध किया जाएगा:

0 1 0 1 1 0 1 0 - 0 0 1 0 1 1 0 1 
----------------------- ----------------------- 
15 14 13 12 11 10 9 8  7 6 5 4 3 2 1 0 

और आप इसे new byte[] { 45, 90 } के रूप में निर्माता को पारित क्योंकि आप इसे कम से कम-महत्वपूर्ण पहले से होकर गुजरेगा। मुद्रित होने पर, यह सूचकांक क्रम में प्रदर्शित होगा: 1011010001011010, जो मूल बाइनरी नोटेशन के विपरीत है।

2

प्रलेखन इसके बारे में स्पष्ट नहीं है, लेकिन मुझे लगता है कि यह पुनरावर्तक एलएसबी से एमएसबी में पुनरावृत्त होता है। मुझे उचित लगता है (व्यक्तिगत रूप से!), जब तक आप बिट्स को प्रिंट नहीं कर लेते। मैंने BitArray.GetEnumerator Method पर एक नज़र डाली थी।

2

नहीं यह थोड़ा सरणी है, न कि संख्यात्मक मान बिट्स के रूप में दर्शाया गया है।

यह बिट ऑपरेशंस के लिए जोड़े गए कुछ तरीकों के साथ किसी भी नियमित सरणी की तरह है। जैसे कि आपके पास int की सरणी थी। आप इसे रिवर्स ऑर्डर में होने की उम्मीद नहीं करेंगे, यह सिर्फ स्थिति के आधार पर स्थिति लेता है।

उदाहरण के लिए:

नंबर (एक बाइट में) एक BitArray करने के लिए परिवर्तित की तरह बाहर आ जाएगा:

2 = 01000000 
5 = 10100000 
8 = 00010000 

आदि

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

पहले मूल्यों सरणी तत्व में नंबर बिट्स 31 के माध्यम से 0 प्रतिनिधित्व करता है:

http://msdn.microsoft.com/en-us/library/b3d1dwck.aspx

प्रमुख मुद्दा है:

यहाँ एक लिंक निर्माता आप उपयोग कर रहे का वर्णन है सरणी में दूसरा नंबर 32 से 63 बिट्स और बिट्स का प्रतिनिधित्व करता है। "मूल्यों [0] & 1" का प्रतिनिधित्व करता सा 0, "मूल्यों [0] & 2" को दर्शाता बिट 1, "मान [0] & 4" का प्रतिनिधित्व करता है: प्रत्येक पूर्णांक के कम से कम महत्वपूर्ण बिट न्यूनतम सूचकांक मूल्य का प्रतिनिधित्व करता है बिट 2, और इतने पर।

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

  • कोई संबंधित समस्या नहीं^_^