Dupliqué possible: strong>
meilleur algorithme de compter le nombre de bits définis dans un entier 32 bits? p> blockQuote>Je veux écrire un programme pour obtenir le numéro de 1 de 1 dans la comparaison de deux chiffres.Si je comparez les bits entre deux chiffres Pour trouver où les nombres binaires sont différents dans les 1 et 0. dans d'autres mots relation exclusive ou (xor). p>
Comme si 22 (qui comporte 10110 binaire) et comparez-le avec 15 (qui a 01111 binaire) p>
Le premier 10110 P>
le deuxième 01111 P>
Le résultat 11001 P>
Et la réponse aurait 25 ans, mais ce que je veux obtenir, c'est 3 où il y a trois 1 et des 0 qui sont différents. p>
3 Réponses :
HRMMM, la première idée non récursive qui vous vient à l'esprit est la suivante:
std :: bitset :: compter devrait faire ce que vous recherchez: p>
http://www.cplusplus.com/reference/stl/bitset/count / p>
http://fr.cppreference.com/w/cpp/uttility/ Bitset / Nombre P>
+1. Il est important d'utiliser la fonction de bibliothèque si votre programme consacre beaucoup de temps à cela, car la plupart des microprocesseurs ont une instruction "Compte de population" dédiée difficile à accéder au contraire autrement. Notez également que bitset code> prend en charge Xor et Conversion vers et depuis
non signé long code>.
Ce serait l'approche la plus facile: Si vous voulez quelque chose de plus fantaisie, jetez un coup d'œil ici: http://graphics.stanford.edu/~Seander/bitacks.html#countbitssetnaive P> p>
Certains processeurs ont une instruction matérielle spéciale pour le nombre de population. Il serait intéressant de savoir si les compilateurs savent à ce sujet et peuvent être apportés pour émettre le code concerné.
C'est ce qu'on appelle le Hamming Distance .
__builtin_popcount (22 ^ 15) = 3