2011-12-19 22 views
13

कहें, मेरे पास जैसे पूर्णांक है, मैं 10001 प्राप्त करने के लिए तीसरे बिट को अनसेट करना चाहता हूं; अगर मेरे पास 10001 है, तो मुझे अभी भी 10001 मिल जाएगा; मैं इसे कैसे प्राप्त कर सकता हूं?एक पूर्णांक में एक विशिष्ट बिट को अनसेट कैसे करें

unset(int i, int j) 
int i= 10101 or 10000 
int j = 00100 
+9

आप भाषा के बारे में अपना मन बना सकते हैं? –

+2

कृपया हमें बताएं कि आप कौन सी प्रोग्रामिंग भाषा * वास्तव में * उपयोग कर रहे हैं। (आपके प्रश्न में "कोड" उन किसी भी व्यक्ति में मान्य नहीं है जिनके साथ आपने प्रश्न टैग किया है।) –

उत्तर

38

सामान्य कुछ आप एक सी समारोह हो सकता था (के साथ सभी रेंज की जाँच हटाया) चाहता था, तो यह एक विशेष अनसेट करने के लिए काम करना चाहिए value में बिट:

:

int mask = 1 << bitIndex; 
value &= ~mask; 

आप समान कोड का उपयोग कर बिट सेट कर सकते हैं 10

value |= mask; 

जहां mask पहले जैसा है। (मतलब यह है कि बिट अनुक्रमण 0. पर शुरू होता है)

0

सी और सी ++ में bit wise AND operator एक और मुखौटा के रूप में उपयोग करें:

10101 & 10001 
+0

यह मनमाने ढंग से बिट को परेशान करने में सहायक नहीं है, क्योंकि आपको समय से पहले मुखौटा बनाना होगा। –

+0

@ क्विनटाइलर: ओपी ** जानता है ** वह जो कुछ भी परेशान करना चाहता है और विशेष रूप से क्यू में ऐसा कहता है, यह देखते हुए कि मुझे डर है कि टिप्पणी और डाउनवोट सिर्फ पैडेंटिक शोर है। –

+0

इस "समाधान" के साथ समस्या यह है कि ओपी को पहले ही मुखौटा '10001' बनाना होगा, जब यह ठीक है कि ओपी गणना करने की कोशिश कर रहा है।(मैंने सामान्य मामले के बारे में पूछने के रूप में ओपी का सवाल पढ़ा, जब कोई 'i' के वास्तविक मूल्य को नहीं जानता है और फिर भी एक विशेष बिट को शून्य करना चाहता है।) –

0

Bitwise functions

जावा में:

int num = 0b10101; 
int mask = 1 << bitPosition; 

System.out.println(Integer.toBinaryString(num)); 
num &= ~mask; 
System.out.println(Integer.toBinaryString(num)); 
+0

गलत। आपका कोड केवल 'N = 3' के लिए काम करता है। 'एन = 0 ..' के लिए 'एन' बिट बिट' (1 << एन) 'दिया जाता है। 'पूर्णांक लम्बाई' के साथ कुछ भी नहीं करना। – EJP

+0

@EJP आह, देर हो चुकी थी जब मैं इसे टाइप कर रहा था, तय किया गया। – Jeffrey

1

आप litterals साथ काम कर रहे हैं, तो आप सिर्फ हेक्स संख्या के साथ काम कर सकते हैं। अपने बिट पैटर्न परिवर्तित संख्या हेक्स के लिए:

10101 => 0x15 
00100 => 0x04 

तो निम्नलिखित सी कोड परिणाम आप चाहते हैं b स्थापित करेगा।

int a = 0x15; 
int b = a & ~(0x04); 

आप यह मानते हुए कि आप सही से बिट्स का अनुक्रमण कर रहे हैं की तरह

int clearBit(int value, int bit) 
{ 
    // Assume we count bits starting at 1 
    return value & ~(1 << (bit -1)); 
} 
10

साफ़ करने के लिए है या सेट थोड़ा

उपयोग बिटवाइज़ AND ऑपरेटर (&) थोड़ा स्पष्ट करने के लिए।

number &= ~(1 << x); 

यह बिट एक्स साफ़ करेगा। आपको बिट स्ट्रिंग को bitwise नहीं ऑपरेटर (~), फिर और उसके साथ उलटा करना होगा।

नोट: यहां एक्स 0 से एलएसबी से शुरू होने वाली स्थिति की स्थिति है।

0

आप टॉगल कर सकते हैं n वें बिट

परिणाम = संख्या^(1 < < bitIndex)

+1

टॉगलिंग समाशोधन नहीं है। ओपी चाहता है कि बिट 0 रहें यदि यह पहले से 0 है। –

संबंधित मुद्दे