2011-01-12 12 views
65

में विशिष्ट बिट सेट करें मैं जावा बाइट चर में बिट सेट करने की कोशिश कर रहा हूं। यह प्रोपर विधियों जैसे .setBit(i) प्रदान करता है। क्या कोई जानता है कि मैं इसे कैसे महसूस कर सकता हूं?बाइट

मैं किसी दिए गए बाइट के माध्यम से बिट के लिहाज से पुनरावृति कर सकते हैं:

if((my_byte & (1 << i)) == 0){ 

} 

हालांकि मैं 1 या 0 करने के लिए इस स्थिति निर्धारित नहीं कर सकते, मैं कर सकते हैं?

उत्तर

109

बिटवाइज़ or और and ऑपरेटर का उपयोग करना।

my_byte = my_byte & ~(1 << pos); 
+3

एक्सओ ऑपरेटर भी देखें - यह शस्त्रागार में तीसरा पावर-टूल है (मास्किंग पर विकिपीडिया लेख देखें)। – Hardryv

59

एक सा सेट करने के लिए:

myByte |= 1 << bit; 

यह साफ़ करने के लिए:

myByte &= ~(1 << bit); 
+0

क्या आप इस मतलब है एक सा "सेट" होगा: b = myByte.get(bit); बिटमैप प्राप्त करें: myByte.set(bit, b); bool प्राप्त करने के लिए? कहें कि आप 0 वें बिट तक पहुंचने की कोशिश कर रहे थे, और MyByte में 11101101 शामिल हैं। इसका क्या अर्थ है? मैं कैसे नियंत्रित कर सकता हूं कि मूल्य निर्धारित किया जा रहा है? – Michael

+3

@ माइकल: थोड़ा सा सेट करना इसका मतलब है 1. थोड़ा सा साफ़ करना इसका मतलब है 0. –

10

तकनीक की जरूरत चुना सा अलग करने के लिए है और या तो सेट करें या उसे साफ़ करें। आपके पास पहले से ही परीक्षण करने के लिए अभिव्यक्ति है क्योंकि आप इसे ऊपर परीक्षण करने के लिए उपयोग कर रहे हैं। आप इसे ऑरिंग करके बिट सेट कर सकते हैं, या बिट को थोड़ा सा और थोड़ा सा पूरक के साथ साफ़ कर सकते हैं।

boolean setBit; 
my_byte = setBit 
      ? myByte | (1 << i) 
      : myByte & ~(1 << i); 
19

बस पूरक Jon‘s answer और driis‘ answer

(उलट) थोड़ा

myByte ^= 1 << bit; 
+0

यह दो अलग-अलग संचालन से क्लीनर है ... – ernesto

+1

@ernesto लेकिन यह विशेष रूप से प्रश्न का उत्तर नहीं देता है। उन्होंने पूछा कि थोड़ा सेट कैसे करें, इसे टॉगल न करें। इसमे अंतर है। बेशक, आप पहले बिट की जांच कर सकते हैं, फिर आवश्यक होने पर इसे टॉगल करें, लेकिन यह 2 अलग-अलग कार्य भी होंगे ... –

6

टॉगल करने के लिए: एक सा सेट संयुक्त राष्ट्र

my_byte = my_byte | (1 << pos); 
करने के लिए

: थोड़ा सेट करने के लिए कृपया क्लास java.util.BitSet देखें जो आपके लिए नौकरी करता है।

सेट करने के लिए: myByte.set(bit); रीसेट करने के लिए: myByte.clear(bit); एक bool से भरना करने के लिए: byte bitMap = myByte.toByteArray()[0];

+2

बिटसेट के साथ सावधान। बिट को 0 सेट करने और इसे साफ़ करने के बीच कोई भेद नहीं है, इस प्रकार 'लंबाई()' उन बिट्स को 0 पर सेट नहीं करेगा –