Je souhaite extraire des bits d'un nombre décimal.
Par exemple, 7 est le binaire 0111, et je veux obtenir 0 1 1 1 tous les bits stockés dans bool. Comment puis-je le faire?
OK, une boucle n'est pas une bonne option, puis-je faire autre chose pour cela?
c
bit-manipulation
Badr
la source
la source
(n >> k) & 1
est également valide et ne nécessite pas de calculer le masque car le masque est constant en raison du décalage avant le masquage au lieu de l'inverse.struct
peut également être utile, car vous obtenez toutes les données requises en une seule opération.Comme demandé, j'ai décidé d'étendre mon commentaire sur la réponse de l'index à une réponse à part entière. Bien que sa réponse soit correcte, elle est inutilement complexe. De plus, toutes les réponses actuelles utilisent des
int
s signés pour représenter les valeurs. Ceci est dangereux, car le déplacement vers la droite des valeurs négatives est défini par l'implémentation (c'est-à-dire non portable) et le déplacement vers la gauche peut conduire à un comportement indéfini (voir cette question ).En décalant vers la droite le bit souhaité dans la position de bit la moins significative, le masquage peut être effectué avec
1
. Pas besoin de calculer une nouvelle valeur de masque pour chaque bit.En tant que programme complet, calculer (puis imprimer) un tableau de valeurs à un seul bit:
En supposant que vous vouliez calculer tous les bits comme dans ce cas, et non un spécifique, la boucle peut être modifiée en
Cela modifie
input
en place et permet ainsi l'utilisation d'un décalage de largeur constante d'un bit, ce qui peut être plus efficace sur certaines architectures.la source
Voici une façon de procéder. Il en existe de nombreuses autres:
Il est difficile de comprendre pourquoi l'utilisation d'une boucle n'est pas souhaitée, mais il est assez facile de dérouler la boucle:
Ou évaluer des expressions constantes dans les quatre dernières instructions:
la source
Voici une manière très simple de le faire;
la source
@prateek merci pour votre aide. J'ai réécrit la fonction avec des commentaires pour une utilisation dans un programme. Augmentez 8 pour plus de bits (jusqu'à 32 pour un entier).
la source
Si vous ne voulez pas de boucles, vous devrez l'écrire:
Comme démontré ici, cela fonctionne également dans un initialiseur.
la source
la source
En utilisant
std::bitset
la source