6
votes

Comparer deux nombres binaires et obtenir les différents bits

Dupliqué possible:
meilleur algorithme de compter le nombre de bits définis dans un entier 32 bits?

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).

Comme si 22 (qui comporte 10110 binaire) et comparez-le avec 15 (qui a 01111 binaire)

Le premier 10110

le deuxième 01111

Le résultat 11001

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.


3 commentaires

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


3 Réponses :


6
votes

HRMMM, la première idée non récursive qui vous vient à l'esprit est la suivante: xxx


0 commentaires

2
votes

1 commentaires

+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 prend en charge Xor et Conversion vers et depuis non signé long .



0
votes

Ce serait l'approche la plus facile: xxx

Si vous voulez quelque chose de plus fantaisie, jetez un coup d'œil ici: http://graphics.stanford.edu/~Seander/bitacks.html#countbitssetnaive


0 commentaires