Un registre 32 bits, c'est-à-dire, status_reg a 1 champ (champ_1 < 0:31>). Pour définir et effacer ce registre, j'essaie d'obtenir la valeur de masque de ce registre. Donc, en général pour obtenir la valeur de masque la formule est:Recherche d'une valeur de masque avec la position supérieure et inférieure du registre
mask = ((~(~0 << (hbit-lbit+1))) << lbit)
Dans ce HBIT est bit de position plus élevée à savoir 31. LBIT est peu position basse i.e.0. Je m'attends à ce que la valeur du masque soit 0xFFFFFFFF. Mais obtenir un masque = 0. Quelqu'un peut-il suggérer quel est le problème avec un masque?
J'utilise un système 32 bits.
Si vous définissez 'hbit' à' 30' et 'lbit' à' 1' vous obtenez le résultat attendu de '0x7FFFFFFE'? – tilz0R
Vous vous déplacez à gauche par 32, ne peut pas faire cela. De plus, à partir de la description, il ne semble pas qu'un masque soit nécessaire en premier lieu, 'status_reg' n'a qu'un seul champ et c'est le * entier int *, pour quoi masques-tu? – harold
@harold est juste, vous n'avez pas besoin de masquer pour obtenir une valeur entière de registre – Toby