C++

2014-12-30 27 views
6

içinde belirli bir bit "0" yapma Programlamada yeniyim. Son zamanlarda, bir sayının belirli bir bitini 0 yapmam gereken bir problemle karşılaştım. ÖrneğinC++

:

ben 0'a 4 bit yapmak istiyorum Şimdi bir p sayısı

p  = 73 
binary = 1001001 

sahip olduklarını 1000001 (2) 65 (10)

yaptım = olduğunu Bunu şu şekilde yapabilirsiniz:

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; 

Bunu yapmanın daha iyi bir yolu var mı?

+0

tıpkı bir "yaptığını biliyor": yani biraz temizleyerek denir. "1" yapmak biraz – bolov

+0

ayarlanmasına gerek yok. Bunu bilmiyordum :(ama şimdi yapıyorum :) teşekkürler – Elliot

cevap

14

Hemen kullanın:

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

Burada neler oluyor?

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.
için biraz değişir yardımcı olur :) Umut nasıl That

+6

Belki de bit manipülasyonuna aşina olmayanlar için bir açıklama ekleyebilir miyim? – jpw

+0

@jpw tamam .. bir açıklama ekliyorum –

+0

Sanırım, daha iyi olabilirsiniz p & ~ (1u << n); ' –