4.4: Operaciones bit a bit
( \newcommand{\kernel}{\mathrm{null}\,}\)
A veces te gustaría realizar operaciones bit a bit en lugar de matemáticas ordinarias. Por ejemplo, ¿y si quieres lógicamente Y dos variables, poco a poco? Las operaciones bitwise son muy comunes cuando se programan microcontroladores como un medio para establecer, borrar y probar bits específicos en registros de control (por ejemplo, establecer un pin específico en un puerto digital para el modo de lectura en lugar del modo de escritura). C tiene una serie de operadores bit a bit. Ellos son:
& | Y |
| | O |
^ | XOR |
~ | El Complemento |
>> | Cambio a la derecha |
<< | Mayús a la izquierda |
Tenga en cuenta el doble uso de &
para “dirección de” y ahora AND. La operación unaria es siempre “dirección de”, y la operación binaria es siempre Y, por lo que a & b
no implicaría la dirección de b
. Si quisieras AND x
con y
, desplaza el resultado 2 lugares a la izquierda y asignas el resultado a z
, usarías:
1 | z = (x&y)<<2; |
Veamos algunos ejemplos. Supongamos que las variables X
, Y
y Z
son caracteres sin signo
. X
e Y
se establecen en 13 y 134, respectivamente. En hexadecimal, eso es 0x0d y 0x86 para patrones de bits de 00001101 y 10000110.
1 | Z = X<<3; // Z is 01101000 or 0x68 |
2 | Z = X>>1; // Z is 00000110 or 0x06 |
3 | Z = ~X; // Z is 11110010 or 0xf2 |
4 | Z = X|Y; // Z is 10001111 or 0x8f |
5 | Z = X&Y; // Z is 00000100 or 0x04 |
6 | Z = X^Y; // Z is 10001011 or 0x8b |