2010-07-17 3 views
19

Disons que j'ai une variable int n = 8. Sur la plupart des machines, ce sera une valeur de 32 bits. Comment puis-je obtenir seulement les 8 bits inférieurs (octet le plus bas) de ceci en binaire? Aussi, comment puis-je accéder à chaque bit pour savoir ce que c'est? Ma question est lié à CComment puis-je obtenir les 8 bits inférieurs d'int?

Répondre

30
unsigned n = 8; 
unsigned low8bits = n & 0xFF; 

note quelques petites choses:

  1. Pour les opérations de manipulation de bits, utilisez toujours les unsigned types
  2. bits peuvent être extraits de chiffres à l'aide de masquage binaire avec l'opérateur &
  3. Pour accéder au bas 8 bits le masque est 0xFF car en binaire il a ses 8 bits bas activés et le reste 0
  4. Les 8 bits bas du nombre 8 sont ... 8 (pensez à un instant)

Pour accéder à un certain nombre peu, disent que le bit k th:

unsigned n = ...; 
unsigned kthbit = (1 << k) & n; 

Maintenant, kthbit sera 0 si le si le bit k e du n bit k e de n est 0, et un nombre positif (2**k) est 1.

15

Utilisation arithmétique binaire pour masquer les 8 bits les plus bas:

unsigned char c = (x & 0xFF); 

Pour accéder à la n-ième bit le plus bas, l'équation est (x & (1 << n)) (n de zéro indique le bit le moins significatif) . Un résultat de zéro indique que le bit est clair et un non-zéro indique que le bit est défini.

2

Vous pouvez t si un peu l'Est particulier est situé dans un numéro à l'aide < < et &, à savoir:

if (num & (1<<3)) ...

testera si le quatrième bit est défini ou non.

De même, on peut extraire seulement les 8 bits inférieurs (comme un nombre entier) en utilisant & avec un nombre qui a seulement les 8 bits les plus bas fixés, à savoir num & 255 ou num & 0xFF (en hexadécimal).

7

La meilleure méthode consiste à utiliser l'opérateur logique de bits & avec la valeur appropriée.

Donc, pour les 8 bits inférieurs:

n & 0xFF; /* 0xFF == all the lower 8 bits set */ 

Ou en règle générale:

n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */ 

Vous pouvez combiner avec l'opérateur de décalage de bits pour obtenir un peu spécifique:

(n & (1<<3))>>3; 
    /* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */ 
+0

le premier bit signifie-t-il le bit "0" ou le bit "1"? –

Questions connexes