Comment puis-je mettre tous les bits à '1' dans un nombre binaire d'une taille inconnue?
Je suis en train d'écrire une fonction dans l'assemblée (mais supposons langue agnostique pour la question).
Comment puis-je utiliser les opérateurs au niveau du bit pour définir tous les bits d'un passé en numéro 1?
Je sais que je peux utiliser le bit-à-bit "ou" avec un masque avec les éléments que je souhaite à définir, mais je ne sais pas comment faire pour construire un masque basé sur un nombre binaire de taille N.
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
~(x & 0)
x & 0 toujours 0, et ~ va retourner tous les bits à 1.
Mettre à 0, puis retournez tous les bits à 1 d'un bit à bit-PAS.
Vous allez trouver que dans le langage d'assemblage vous ont de connaître la taille d'un "bon nombre". Et en langage assembleur il est vraiment important la machine qui la langue de l'assembly.
Compte tenu de cette information, vous vous demandez peut-être soit
ou
Pour remplir un registre avec tous les bits à 1, sur la plupart des machines de la façon efficace prend deux instructions:
Effacer le registre, en utilisant soit un objectif spécifique d'instructions claires, ou de la charge immédiate 0, ou exclusif (xor), le registre avec lui-même.
Prendre le complément bit à bit du registre.
De remplissage de la mémoire avec des bits à 1, puis exige 1 ou plus de stocker des instructions...
Vous trouverez beaucoup plus de bits de se tourner les trucs et astuces pour Hank Warren livre merveilleux de Hacker Plaisir.
Ensemble x à 1
Tout x < nombre
x = x * 2
Réponse = nombre ou x - 1.
Le code suppose que votre entrée est appelé "nombre". Il devrait fonctionner correctement pour les valeurs positives. Remarque pour les valeurs négatives qui sont deux complètent l'opération tentative n'a pas de sens tant que le bit élevé sera toujours un.
Mis à
-1
. C'est généralement représenté par tous les bits 1.