2017-09-17 4 views
-3

Quelle est la meilleure façon de compter le nombre de 1 dans un entier x de 32 bits x sans utiliser ni pour ni pour des boucles, et sans utiliser de constantes supérieures à 0xFF? Ce à quoi j'ai pensé est de déplacer x 24 vers la droite et de compter combien de 1 dans l'entier décalé et de stocker cela dans un compte variable. Et puis, en déplaçant x 16 vers la droite et en incrémentant, comptez le nombre de 1 dans l'entier décalé, et ainsi de suite.Comptage du nombre de 1 dans un entier C

Alors, des idées d'une meilleure solution?

+0

Le code repose fortement sur un comportement défini par l'implémentation, c'est-à-dire n'est pas portable. Il peut également invoquer un comportement indéfini pour des décomptes de décalage trop importants sur des plates-formes avec Olaf

+0

Par nombre de ceux que vous voulez dire la représentation binaire du nombre ou de la base 10 – Mitchel0022

+0

nombre de ceux de la représentation binaire –

Répondre

1

Vous pouvez tabuler le nombre de 1 dans tous les nombres de bits d. Cela prend une table de 2^d entrées, chacune ne dépassant pas la valeur d (<255).

Maintenant, vous pouvez réduire votre nombre en tranches de d bits et rechercher les comptes pour toutes les tranches.

Un bon compromis entre espace/nombre d'opérations est probablement avec d=4 (tranches 8, taille de table = 16).

+0

Ce n'est pas nécessairement mieux, mais pire. – Olaf

+0

@Olaf: de quoi parlez-vous? –

+0

Très probablement sur ce que vous avez écrit, je dirais. – Olaf