Soy bastante nuevo en la programación en C y encontré un poco de enmascaramiento. ¿Alguien puede explicarme el concepto general y la función del enmascaramiento de bits? Los ejemplos son muy apreciados.
191
Soy bastante nuevo en la programación en C y encontré un poco de enmascaramiento. ¿Alguien puede explicarme el concepto general y la función del enmascaramiento de bits? Los ejemplos son muy apreciados.
Respuestas:
Una máscara define qué bits desea conservar y qué bits desea eliminar.
El enmascaramiento es el acto de aplicar una máscara a un valor. Esto se logra haciendo:
A continuación se muestra un ejemplo de extracción de un subconjunto de los bits en el valor:
Aplicar la máscara al valor significa que queremos borrar los primeros 4 bits (superiores) y mantener los últimos 4 bits (inferiores). Por lo tanto, hemos extraído los 4 bits inferiores. El resultado es:
El enmascaramiento se implementa usando AND, por lo que en C obtenemos:
Aquí hay un caso de uso bastante común: extraer bytes individuales de una palabra más grande. Definimos los bits de orden superior en la palabra como el primer byte. Utilizamos dos operadores para esto
&
, y>>
(desplazamiento a la derecha). Así es como podemos extraer los cuatro bytes de un entero de 32 bits:Tenga en cuenta que puede cambiar el orden de los operadores anteriores, primero puede hacer la máscara, luego el cambio. Los resultados son los mismos, pero ahora tendría que usar una máscara diferente:
fuente
&
.#define MASK 0x000000FF .... my_uint32_t &= ~MASK
.b
para indicar el literal binario no es compatible con todos los compiladores, ¿correcto?Enmascarar significa mantener / cambiar / eliminar una parte deseada de la información. Veamos una operación de enmascaramiento de imágenes; como esta operación de enmascaramiento está eliminando cualquier cosa que no sea piel
Estamos haciendo Y operación en este ejemplo. También hay otros operadores de enmascaramiento: OR , XOR .
Bit-Masking significa imponer una máscara sobre bits. Aquí hay un enmascaramiento de bits con AND -
Por lo tanto, solo quedan los 4 bits centrales (ya que estos bits están
1
en esta máscara).Veamos esto con XOR -
Ahora, los 4 bits centrales se voltean (se
1
convirtieron0
, se0
convirtieron1
).Entonces, usando bit-mask podemos acceder a bits individuales [ ejemplos ]. A veces, esta técnica también se puede utilizar para mejorar el rendimiento. Toma esto por ejemplo
Esta función indica si un número entero es impar / par. Podemos lograr el mismo resultado con más eficiencia usando bit-mask-
Explicación breve : si el bit menos significativo de un número binario es
1
entonces es impar; porque0
será parejo. Entonces, al hacer AND con1
, estamos eliminando todos los demás bits, excepto el bit menos significativo, es decir:fuente