हो सकता है वे तुम्हें एक सामान्य सेट लिखने के लिए कैसे/शाखाओं के बिना टुकड़ा रीसेट दिखाने के लिए चाहता था ...
यह
value = (value & ~(1 << bit)) | (bitval << bit);
जहां bit
बिट स्थिति है और bitval
साथ पूरा किया जा सकता सेट के लिए 1 और रीसेट के लिए 0 है।
कुछ भी थोड़ा अधिक सामान्य है निम्नलिखित:
value = (value & ~(k1 << bit))^(k2 << bit);
कि कई आपरेशनों लागू करता है:
k1=0
और k2=0
k1=0
और k2=1
कुछ नहीं करता है टॉगल सा
k1=1
और k2=0
बिट को साफ करता है
k1=1
और k2=1
बिट
अधिक आम तौर पर
value = (value & a)^x;
साथ आप
aj=0
द्वारा एक ही समय में value
के कई टुकड़े को बदलने का फैसला कर सकते हैं सेट, xj=0
→ उन्हें 0 पर सेट करना 10
aj=0
, xj=1
उन्हें इससे अछूते ही रहे
aj=1
, xj=1
→ उन्हें
flipping precomputed स्थिरांक a
और x
(aj
और xj
पर निर्भर करता है → 1
aj=1
, xj=0
करने के लिए उन्हें स्थापित करने → मान रहे हैं स्थिरांक में जे-वें बिट के)। उदाहरण
value = (value & 0x0F)^0x3C;
एक भी आपरेशन के साथ के लिए
- leave untouched bit 0 and 1
- flip bits 2 and 3
- set to 1 bits 4 and 5
- set to 0 all other bits
मेरे जवाबी सवाल होगा होगा: कैसे नरक आप सेट या शाखाओं के साथ एक सा रीसेट करते हैं? – Art
"सेट या रीसेट" करके उनका टॉगल मतलब है? आप इसे xor के साथ कर सकते हैं। –
@Art ... मुझे ब्रांचिंग के बारे में कुछ नहीं पता ... बस मैं थोड़ा हेरफेर कर सकता हूं और थोड़ा सेट कर सकता हूं या रीसेट कर सकता हूं ... मैं जानना चाहता हूं कि शाखा क्या है? – someone