2014-12-30 7 views
6

में एक विशेष बिट "0" बनाना प्रोग्रामिंग में नया हूं। हाल ही में मुझे एक समस्या आई है जिसमें मुझे एक संख्या का एक विशेष बिट 0 बनाना है।सी ++

उदाहरण के लिए:

मैं मैं 0 करने के लिए 4 बिट बनाना चाहते एक नंबर पी

p  = 73 
binary = 1001001 

है अब, वह यह है कि 1,000,001 (2) = 65 (10)

मैंने किया यह निम्न तरीके से:

int p = 73; 
int pos = 1<<3; // 4th bit 
int max_bit = (1<<31) - 1; // making all bit to 1 
int mask = pos^max_bit; // making 4th bit to 0 except others 
p = p & mask; // changing 4th bit of p to 0 
cout<<p<<endl; 

क्या ऐसा करने का कोई बेहतर तरीका है?

+0

बस के रूप में एक "क्या आप जानते हैं": कि एक सा समाशोधन कहा जाता है। इसे "1" बनाना थोड़ा सा – bolov

+0

सेट नहीं किया गया है, मुझे नहीं पता था :(लेकिन अब मैं :) :) – Elliot

उत्तर

14

बस का उपयोग करें:

p = p & ~(1u<<3); 

यहाँ क्या होता है?

1. (1u<<3)  0...01000 
2. ~(1u<<3)  1...10111 // Invert the bits 
3. p & ~(1u<<3) *****0*** // Here * means the bit representation of p 

है कि कैसे 0.
को थोड़ा परिवर्तन आशा है कि यह मदद करता है :)

+6

शायद उन लोगों के लिए स्पष्टीकरण जोड़ें जो बिट मैनिपुलेशन से परिचित नहीं हैं? – jpw

+0

@jpw ठीक है .. मैं एक स्पष्टीकरण जोड़ रहा हूं –

+0

मुझे लगता है कि बेहतर हो सकता है, 'p & ~ (1u << n) लिखना बेहतर है; ' –