2012-02-20 16 views
30

यदि मेरे पास बाइट है, तो विधि किसी निश्चित स्थिति पर थोड़ा सा पुनर्प्राप्ति कैसे करेगी?बाइट से किसी निश्चित स्थिति पर थोड़ा सा मूल्य कैसे प्राप्त करें?

यहां मुझे पता है, और मुझे नहीं लगता कि यह काम करता है।

public byte getBit(int position) { 
    return (byte) (ID >> (position - 1)); 
} 

जहां ID बाइट मैं से जानकारी प्राप्त करने हूँ का नाम है।

+0

आपका लगभग वहाँ तुम सिर्फ थोड़ा तुम सिर्फ 0x01 – Dampsquid

+0

की [जावा संभावित डुप्लिकेट के साथ Anding से स्थानांतरित कर दिया है बंद मुखौटा की जरूरत है: अगर जाँच हो रही है एक सा एक लंबे समय में 0 या 1 है] (https://stackoverflow.com/questions/1092411/java-checking-if-a-bit-is-0-or-1-in-a-long) –

उत्तर

66
public byte getBit(int position) 
{ 
    return (ID >> position) & 1; 
} 

स्थिति के आधार पर दायां स्थानांतरित करने से आईडी # स्थिति को दाएं स्थान पर दाएं स्थान पर सही कर देगा। बिटवाई के साथ और & के साथ संयोजन 1 आपको बताएगा कि बिट सेट है या नहीं।

position = 2 
ID = 5 = 0000 0101 (in binary) 
ID >> position = 0000 0001 

0000 0001 & 0000 0001(1 in binary) = 1, because the furthest right bit is set. 
+0

वास्तव में, यह थोड़ा सा है तथा; तार्किक और है && –

+0

@CharlieMartin यह इंगित करने के लिए धन्यवाद, मैं संपादित करूंगा। –

7

आप थोड़ा मुखौटा बनाना चाहते हैं और थोड़ा सा करना चाहते हैं और। यह आपके पास जो कुछ है उसके बहुत करीब दिखने वाला होगा - उपयुक्त बिट सेट करने के लिए शिफ्ट का उपयोग करें, थोड़ा सा ऑप करने के लिए & का उपयोग करें।

तो

return ((byte)ID) & (0x01 << pos) ; 

जहां pos 0 और 7 के बीच सीमा को आप के रूप में "बिट 1" तो आप की जरूरत कम से कम महत्वपूर्ण बिट है, तो है अपने -1 लेकिन मैं इसके खिलाफ सलाह देते हैं - उस तरह स्थिति में परिवर्तन हमेशा मेरे लिए त्रुटियों का स्रोत है।

0

पूर्णांक में वें बिट पाने के लिए

return ((num >> (n-1)) & 1);