एक चर है जो कुछ झंडे रखता है और मैं उनमें से एक को निकालना चाहता हूं। लेकिन मुझे नहीं पता कि इसे कैसे हटाया जाए।
यहां बताया गया है कि मैं झंडा कैसे स्थापित करता हूं।
my.emask |= ENABLE_SHOOT;
एक चर है जो कुछ झंडे रखता है और मैं उनमें से एक को निकालना चाहता हूं। लेकिन मुझे नहीं पता कि इसे कैसे हटाया जाए।
यहां बताया गया है कि मैं झंडा कैसे स्थापित करता हूं।
my.emask |= ENABLE_SHOOT;
जवाबों:
संक्षिप्त जवाब
आप उस ध्वज के बिटवाइज़ नहीं संचालन के साथ वर्तमान मान पर एक बिटवाइज़ और ऑपरेशन करना चाहते हैं जिसे आप अनसेट करना चाहते हैं । एक बिटवाइज़ हर बिट को निष्क्रिय नहीं करता है (यानी 0 => 1, 1 => 0)।
flags = flags & ~MASK;
या flags &= ~MASK;
।
लंबा जवाब
ENABLE_WALK = 0 // 00000000
ENABLE_RUN = 1 // 00000001
ENABLE_SHOOT = 2 // 00000010
ENABLE_SHOOTRUN = 3 // 00000011
value = ENABLE_RUN // 00000001
value |= ENABLE_SHOOT // 00000011 or same as ENABLE_SHOOTRUN
जब आप एक बिटवाइज़ और बिटवाइज़ के साथ उस मूल्य का प्रदर्शन करते हैं जिसे आप परेशान करना चाहते हैं।
value = value & ~ENABLE_SHOOT // 00000001
आप वास्तव में कर रहे हैं:
0 0 0 0 0 0 1 1 (current value)
& 1 1 1 1 1 1 0 1 (~ENABLE_SHOOT)
---------------
0 0 0 0 0 0 0 1 (result)
notification.sound ^= Notification.DEFAULT_SOUND;
my.emask &= ~(ENABLE_SHOOT);
कुछ झंडे साफ़ करने के लिए:
my.emask &= ~(ENABLE_SHOOT|SOME_OTHER|ONE_MORE);
यह ध्यान रखना महत्वपूर्ण है कि यदि परिवर्तन किया जा रहा चर एक इंट से बड़ा है, तो 'और न' अभिव्यक्ति में उपयोग किया गया मान भी होना चाहिए। वास्तव में, कभी-कभी छोटे प्रकारों का उपयोग करने से कोई भी दूर हो सकता है, लेकिन पर्याप्त अजीब मामले हैं कि यह सुनिश्चित करने के लिए कि प्रत्यय पर्याप्त बड़े हैं, प्रकार के प्रत्ययों का उपयोग करना सबसे अच्छा है।
flags -= flags & MY_FLAG;
(या ^=
यदि आप चाहें तो) का उपयोग करें।