2014-12-30 13 views
6

Ich bin neu bei der Programmierung. Kürzlich bin ich auf ein Problem gestoßen, bei dem ich ein bestimmtes Bit 0 einer Zahl machen muss.Ein bestimmtes Bit "0" in C++ machen

Zum Beispiel:

Ich habe eine Reihe p

p  = 73 
binary = 1001001 

Jetzt will ich 4. Bit auf 0 machen, das heißt 1.000.001 (2) = 65 (10)

Ich habe dies in folgender Weise:

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; 

Gibt es einen besseren Weg, dies zu tun?

+0

nur als „Hast du wissen“: das heißt etwas zu löschen. Making it "1" heißt Einstellung ein wenig – bolov

+0

nein, ich wusste nicht, dass :(aber ich mache jetzt :) danke – Elliot

Antwort

14

Verwenden Sie einfach:

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

Was hier passiert?

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 

Das ist, wie die Bit auf 0.
Hoffe, es hilft :)

+6

Vielleicht eine Erklärung für diejenigen, die nicht mit Bit-Manipulation vertraut? – jpw

+0

@jpw okay .. ich füge eine Erklärung hinzu –

+0

Ich denke, kann besser sein, zu schreiben 'p & ~ (1u << n);' –

Verwandte Themen