2014-12-30 14 views
6

Jestem nowy w programowaniu. Ostatnio natknąłem się na problem, w którym muszę zrobić konkretny bit 0 liczby.Tworzenie określonego bitu "0" w C++

Na przykład:

Mam liczba p

p  = 73 
binary = 1001001 

Teraz chcę uczynić 4th bit na 0, to jest 1.000.001 (2) = 65 (10)

zrobiłem to w następujący sposób:

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; 

Czy jest lepszy sposób to zrobić?

+0

prostu jako „nie wiesz”: że nazywa wyczyszczenie trochę. Stworzenie "1" nazywane jest ustawianiem nieco – bolov

+0

nie, nie wiedziałem tego :(ale teraz robię :) dzięki – Elliot

Odpowiedz

14

Wystarczy użyć:

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

Co się tutaj dzieje?

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 

To, w jaki sposób zmiany bitu 0.
Nadzieja to pomaga :)

+6

Może dodać wyjaśnienie dla tych, którzy nie są zaznajomieni z manipulacją bitową? – jpw

+0

@jpw ok .. Dodaję wyjaśnienie –

+0

Myślę, że może być lepiej napisać 'p & ~ (1u << n);' –

Powiązane problemy