¿Cómo obtengo los 8 bits más bajos de int?

Digamos que tengo una variable int n = 8. En la mayoría de las máquinas, este será un valor de 32 bits. ¿Cómo puedo obtener solo los 8 bits más bajos (byte más bajo) de este en binario? Además, ¿cómo puedo acceder a cada bit para averiguar qué es? Mi pregunta esta relacionada con C

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

Tenga en cuenta algunas cosas:

  1. Para operaciones bitwise, use siempre los tipos unsigned
  2. Los bits se pueden extraer de los números mediante el enmascaramiento binario con el operador &
  3. Para acceder a los 8 bits bajos, la máscara es 0xFF porque en binario tiene sus 8 bits bajos activados y el rest 0
  4. Los 8 bits bajos del número 8 son … 8 (piénsalo un momento)

Para acceder a cierto bit de un número, diga el bit k th:

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

Ahora, kthbit será 0 si el bit k de n es 0, y algún número positivo ( 2**k ) si el bit k de n es 1.

Use aritmética a nivel de bits para enmascarar los 8 bits más bajos:

 unsigned char c = (x & 0xFF); 

Para acceder al bit n más bajo, la ecuación es (x & (1 << n)) (n de cero indica el bit menos significativo). Un resultado de cero indica que el bit está despejado y un valor distinto de cero indica que el bit está establecido.

La mejor manera es usar el operador lógico de bits y con el valor adecuado.

Así que para los 8 bits más bajos:

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

O como regla general:

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

Puede combinar con el operador de cambio de bit para obtener un bit específico:

 (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 */ 

Puede probar si un bit en particular está configurado en un número usando << y &, es decir:

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

comprobará si el cuarto bit está establecido o no.

De manera similar, puede extraer solo los 8 bits más bajos (como un entero) utilizando & con un número que solo tiene los 8 bits más bajos establecidos, es decir, num & 255 o num & 0xFF (en hexadecimal).