2017-10-07 4 views
0

tout le monde,Trouver leader 1s dans le nombre binaire

Je suis nouveau en C et j'essaie de comprendre le travail avec des octets, des nombres binaires et une autre chose importante pour le débutant.

J'espère que quelqu'un peut me pousser dans la bonne direction ici. Par exemple, j'ai un nombre de 32 bits 11000000 10101000 00000101 0000000 (3232236800). J'ai également affecté chaque partie de ce nombre à des variables séparées: a = 11000000 (192), b = 10101000 (168), c = 00000101 (5) d = 0000000 (0). Je ne suis pas sûr si j'ai vraiment besoin de ça.

Y a-t-il un moyen de trouver le dernier 1 dans le nombre et utiliser cet emplacement pour calculer le nombre de 1 principaux?

Nous vous remercions de votre aide!

+1

La recherche du dernier 1 dans '10101000' ne vous dit pas combien d'autres 1 il y a (combien il peut y avoir *). En tout cas, pour un débutant c'est assez sans importance. –

Répondre

1

Vous pouvez déterminer la BitPosition du premier leader 1 par cette formule:

floor(ln(number)/ln(2)) 

Où "étage()" signifie arrondi vers le bas.
Pour compter le nombre d'interlignages consécutifs (si j'obtiens correctement la deuxième partie de votre question), je ne peux qu'imaginer une boucle.

Note 1:
La formule est la formule mathématique pour "logarithme de nombre sur la base de 2".
La même chose fonctionne avec log10(). Fondamentalement, vous pouvez utiliser n'importe quel logarithme (c'est-à-dire à n'importe quelle base) de cette façon pour s'adapter à une base différente.

Note 2:
Il est bien sûr discutable si cette formule est plus efficace que la recherche de MSB vers le bas avec une boucle. Ce pourrait être avec un bon soutien FPU. Ce n'est probablement pas pour les valeurs 8bit. Double vérifier dans le cas où vous êtes hors de vitesse optimiser.

+0

Pouvez-vous s'il vous plaît me dire comment vous êtes arrivé à cette formule? –

+0

@J ... S Merci pour votre commentaire, j'ai amélioré la réponse à cause de cela. – Yunnosch