Operadores a nivel de bits

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.

Confusión entre operadores lógicos y lógicos a nivel de bits

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.