2012-02-16 4 views
1

Duplicate possible:
Best algorithm to count the number of set bits in a 32-bit integer?
Counting the number of bits that are setNombre de bits définis (peut itérer même nombre de fois que le nombre de bits set)

Comment trouver le nombre de bits fixés dans un entier non signé quand il est permis d'itérer la boucle le même nombre de fois que le nombre de bits mis (si 3 bits sont définis, vous ne pouvez itérer la boucle que 3 fois)

+0

[? Le meilleur algorithme pour compter le nombre de bits fixés dans un entier de 32 bits] [1] [1]: http://stackoverflow.com/questions/109023/best-algorithm-to-count-the-number-of-set-bits-in-a-32-bit-integer/5469563#5469563 –

Répondre

6

C'est une méthode que je connais pour y parvenir, il n'itérer le nombre de bits mis en v, à la fin de l'exécution c contiendra le nombre de bits dans v:

unsigned int v; // count the number of bits set in v 
unsigned int c; // c accumulates the total bits set in v 
for (c = 0; v; c++) 
{ 
    v &= v - 1; // clear the least significant bit set 
} 

sources : C Langage de programmation 2e éd. (Par Brian W. Kernighan et Dennis M. Ritchie)

exemple:

v = 1010; //2 bits are set 
v - 1 = 1010(10 decimal) - 1 = 1001(9 decimal) 

1010 
1001 & 
------ 
1000   The least significant bit is unset, c is incremented by 1 

v = 1000 
v - 1 = 1000 - 1 = 0111 

1000 
0111 & 
------- 
0000   The least significant bit is unset again, c is incremented 
      by 1, the loop stops because there are no more set bits. 
Questions connexes