2011-08-09 30 views
10

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

byte[] b = new byte[4] { 3, 2, 5, 7 }; 
int c = (b[0] & 0x7f) << 24 | b[1] << 16 | b[2] << 8 | b[3]; 

किसी को भी बता सकते हैं कि यहाँ क्या हो रहा है? धन्यवाद!

+0

आप हमें जहाँ आप इस कोड पाया के बारे में थोड़ा संदर्भ देने के लिए चाहते हैं? या यह सिर्फ एक परीक्षण है? – Nix

+0

@Nix वह है जहां उसे वास्तव में प्रासंगिक मिला? – MGZero

+0

@MGZero अब यह उत्तर दिया गया है .. – Nix

उत्तर

20

असल में यह big-endian conversion का उपयोग करके एक 4 बाइट सरणी के निचले 31 बिट्स को एक पूर्णांक में परिवर्तित करता है।

तो {0, 0, 0, 1} का बाइट सरणी 1 में परिवर्तित हो जाएगी; {0, 0, 1, 0} 256 में रूपांतरित हो जाएगा एक बाइट सरणी आदि

यह बिटवाइज़ ऑपरेटर्स का एक मिश्रण के माध्यम से इस करता है:

+0

इस पर कोई विस्तृत जानकारी? लिंक, आदि। मैं इसकी सराहना करता हूं। – Kizz

+0

@ किज़: मैं बस प्रत्येक ऑपरेटर के लिए लिंक के साथ संपादन कर रहा था। आपको और क्या चाहिए? –

+0

@ जोन: धन्यवाद! – MTG

5

मज़ा so..for एक मिनट में बिट गणित नहीं किया है

((b[0] & 0x7f) << 24) | (b[1] << 16) | (b[2] << 8) | b[3] 

(b[0] & 0x7f) << 24 = 11 0000 0000 0000 0000 0000 0000 
b[1] << 16 = . . . . . . . . . . 10 0000 0000 0000 0000 
b[2] << 8 = . . . . . . . . . . . . . . . 101 0000 0000 
b[3] = . . . . . . . . . . . . . . . 0111 
अब

या [अतिरिक्त कोष्ठक ऑप्स के आदेश दिखाने के लिए] इन एक साथ, और आप

0011 0000 0010 0000 0101 0000 0111 = 50,464,007 
संबंधित मुद्दे