Documentos de Académico
Documentos de Profesional
Documentos de Cultura
14/09/2018
El operador de complemento invierte todos los bits que forma parte del espacio de almacenamiento
de una variable, por lo que no tendremos necesariamente el mismo resultado al aplicarlo a dos
variables de diferentes tamaño.
uint8 t v1 = 0x00 uint32 t v2 = 0x00;
v1 = ∼v1; v2 = ∼v2;
/*v1 ->0xFF */ /* v2 ->0xFFFFFFFF */
A B A & B
0 0 0
1 0 0
0 1 0
1 1 1
Al aplicar esta operación a variables, el comportamiento anterior se propaga a cada uno de los bits
que la constituyen. Si A y B se definen como variables de tipo uint8 t obtendrı́amos:
A = 0x0F 0 0 0 0 1 1 1 1
B = 0x55 0 1 0 1 0 1 0 1
A & B = 0x05 0 0 0 0 0 1 0 1
El comportamiento visto en este ejemplo es el principio de uso más común de este operador: la
implementación de máscaras de lectura.
La solución a este problema consiste en utilizar valores que anulen los bits que no son de interés
para un fin particular. Por ejemplo:
uint8_t nivelBateria ;
uint8_t conectividad ;
Operador or (¦)
De modo análogo al operador and, el operador or está asociado a la suma (sin acarreo). Si se
aplica a dos bits, digamos A y B, el resultado obtenido será el de la siguiente tabla:
A B A ¦ B
0 0 0
1 0 1
0 1 1
1 1 1
Al aplicar esta operación a variables, el comportamiento anterior se propaga a cada uno de los bits
que la constituyen. Si A y B se definen como variables de tipo uint8 t obtendrı́amos:
A = 0x0F 0 0 0 0 1 1 1 1
B = 0x55 0 1 0 1 0 1 0 1
A ¦ B = 0x5F 0 1 0 1 1 1 1 1
Tal como en el caso del operador and (&) la forma de trabajo habitual consiste en la conformación
de máscaras (valores constantes) para establecer valores (‘1’) en posiciones particulares.
A B A ^ B
0 0 0
1 0 1
0 1 1
1 1 0
De la tabla, suponiendo que B fuese una máscara (valor constante conocido) podrı́amos pensar que
controla el valor de A. Ası́, cuando B vale 0, la expresión A ^ B es igual al valor de A.
Cuando B toma valor 1, la expresión A ^ B es equivalente al valor de A negado.
Por esto lo podemos pensar como una ‘llave’ para controlar la inversión de un valor binario.
Del mismo modo que con los operadores anteriores, al aplicarse a una variable, el valor resultante
surge de la aplicación del operador a cada uno de los bits que lo constituyen.
A = 0x55 0 1 0 1 0 1 0 1
B = 0x0F 0 0 0 0 1 1 1 1
A ^ B = 0x5A 0 1 0 1 1 0 1 0
Operadores de Corrimiento
Los operadores de corrimiento permiten manipular el valor de los bits desplazándolos a la izquierda
y derecha, dando origen a nuevos valores. Cada vez que se realiza un desplazamiento, los valores
que ‘salen’ se pierden y se agregan bits con valor cero.
Ejemplos de uso:
Una de las aplicaciones más significativas es el uso de los operadores de corrimiento para realizar
multiplicaciones y divisiones por potencias de dos.
Fin Módulo 6