Los operadores a nivel de bits son operadores que pueden ejecutar instrucciones a nivel de bits, comunes en el lenguaje máquina. Los operadores a nivel de bits actúan sobre todos y cada uno de los bits de los operandos. Realizan la operación solicitada y devuelven un entero del tipo de los operandos.
Operadores a nivel de bits | |||
Operador | Descripción | Ejemplo a=1 b=2 c=3 |
Resultado |
---|---|---|---|
& | y (and) bit a bit | a & b a & c |
0 1 |
| | o (or) bit a bit | a | b | 3 |
^ | o (or) exclusivo bit a bit | a ^ c | 2 |
~ (ALT 126) | Complemento a uno de bits. Invierte todos y cada uno de los bits del operando. Formato: ~operando |
~a | depende del tipo y rango de a |
<< | Desplazamiento a la izquierda del primer operando tantas veces como indique el segundo. Rellena de ceros los bits menos significativos. | a << b c << b |
4 12 |
>> | Desplazamiento a la derecha del primer operando tantas veces como indique el segundo. Los bits más significativos se rellenan de ceros si el primer operando es unsigned y si no, se rellenan de unos. | c >> a 15 >> 2 |
1 3 |
Estos operadores actúan sobre los char e int con o sin modificadores.
Los operadores lógicos actúan interpretando los operandos como verdadero o falso y devolviendo a su vez verdadero o falso, según corresponda. A todos los efectos, en C (antes de C99) los enteros son el tipo lógico, considerándose el cero como falso y los valores distintos de cero como verdadero. Los operadores a nivel de bits actúan sobre todos y cada uno de los bits de los operandos. Realizan la operación solicitada y devuelven un entero del tipo de los operandos. El problema está en que en una condición puede aparecer un entero obtenido a partir de cualquiera de los dos tipos de expresiones.