De Here (respuesta general para conseguir este hilo iniciado)
Una máscara de bits es un valor (que puede ser almacenado en una variable) que le permite aislar un conjunto específico de bits dentro de un tipo entero.
Normalmente, el enmascarado tendrá los bits que le interesan establecidos en 1 y todos los demás bits en 0. La máscara le permite aislar el valor de los bits, borrar todos los bits o establecer todos los bits o establecer un nuevo valor para los bits.
Las máscaras (particularmente las de varios bits) a menudo tienen un valor de desplazamiento asociado que es la cantidad que los bits necesitan desplazarse hacia la izquierda para que el bit enmascarado menos significativo se desplace al bit menos significativo del tipo.
Por ejemplo, utilizando un tipo de datos cortos de 16 bits, suponga que desea poder enmascarar los bits 3, 4 y 5 (LSB es el número 0). Enmascara y el cambio sería algo como
#define MASK 0x0038
#define SHIFT 3
máscaras son a menudo asignados en hexadecimal, ya que es más fácil trabajar con bits en el tipo de datos en esa base en contraposición a decimal. Históricamente octal también se ha usado para máscaras de bits.
Si tengo una variable, var, que contiene datos que la máscara es relevante para entonces puedo aislar los bits como esto
var & MASK
puedo aislar a todos los otros bits como esto
var & ~MASK
puedo borrar los bits como esto
var &= ~MASK;
puedo borrar todos los otros bits como esto
var &= MASK;
puedo configurar todos los bits como este
var |= MASK;
I pueden establecer todos los otros bits como este
var |= ~MASK;
puedo extraer el valor decimal de los bits como este
(var & MASK) >> SHIFT
Puedo asignar un nuevo valor para los bits como este
var &= ~MASK;
var |= (newValue << SHIFT) & MASK;
+1, mucho más preciso que mi respuesta general. – VonC
Gracias, eso era exactamente lo que necesitaba. –