Operadores de manejo de bits

Operadores de manejo de bits
Información sobre la plantilla
Concepto:Permiten actuar sobre los operandos para modificar un solo bit, se aplican a variables del tipo char, short, int y long

Operadores de manejo de bits. Estos operadores permiten actuar sobre los operandos para modificar un solo bit, se aplican a variables del tipo char , short , int y long y no pueden ser usados con float ó double, sólo se pueden aplicar a expresiones enteras. En ocasiones los operadores de bits se utilizan para compactar la información, logrando que un tipo básico (por ejemplo un long) almacene magnitudes más pequeñas mediante aprovechamientos parciales de los bits disponibles

Operadores para manejo de bits

~  Complemento a uno 
<< Desplazamiento a izquierda 
>> Desplazamiento a derecha  
&  AND; compara dos bits  
^  XOR (OR exclusivo);  compara dos bits 
|  OR inclusivo;  compara dos bits

El primero es un operador unario, los restantes son binarios. Los tres primeros realizan manipulaciones en los bits del operando. Los restantes realizan comparaciones lógicas entre los bits de ambos operandos, similares a las que realizan los operadores lógicos entre objetos booleanos.

Complemento a uno ~ (palabra clave compl)

Este operador unitario invierte cada bit del operando; 0 es convertido en 1 y viceversa.

Sintaxis

~cast-expresion

Ejemplo

signed int s1 = ~2;        // equivale a:
signed int s1 = compl 2;
signed int s2 = ~s1 + 2;

Desplazamiento a izquierda <<

Este operador binario realiza un desplazamiento de bits a la izquierda. El bit más significativo (más a la izquierda) se pierde, y se le asigna un 0 al menos significativo (el de la derecha). El operando derecho indica el número de desplazamientos que se realizarán. Los desplazamientos no son rotaciones; los bits que salen por la izquierda se pierden, los que entran por la derecha se rellenan con ceros. Este tipo de desplazamientos se denominan lógicos en contraposición a los cíclicos o rotacionales.

Sintaxis

expr-desplazada << expr-desplazamiento

Comentario

El patrón de bits de expr-desplazada sufre un desplazamiento izquierda del valor indicado por la expr-desplazamiento. Ambos operandos deben ser números enteros o enumeraciones. En caso contrario, el compilador realiza una conversión automática de tipo. El resultado es del tipo del primer operando. expr-desplazamiento, una vez promovido a entero, debe ser un entero positivo y menor que la longitud del primer operando. En caso contrario el resultado es indefinido (depende de la implementación).

Ejemplo

unsigned long x = 10;
int y = 2;
unsigned long z = x << y;

Desplazamiento a derecha >>

Sintaxis

expr-desplazada >> expr-desplazamiento

Ejemplo:

unsigned long x = 10;
unsigned long z = x >> 2;

Comentario:

El patrón de bits de expr-desplazada sufre un desplazamiento derecho del valor indicado por la expr-desplazamiento. Como en el caso anterior, ambos operandos deben ser números enteros o enumeraciones. En caso contrario, el compilador realiza una conversión automática de tipo. El resultado es del tipo del primer operando. Una vez promovida a entero, expr-desplazamiento debe ser un entero positivo y menor que la longitud del primer operando. En caso contrario, el resultado es indefinido (depende de la implementación). El bit menos significativo (a la derecha) se pierde, pero hay que advertir que si expr-desplazada es un entero con signo y es negativo, el resultado depende de la implementación.

AND lógico & (palabra clave bitand)

Este operador binario compara ambos operandos bit a bit, y como resultado devuelve un valor construido de tal forma, que cada bits es 1 si los bits correspondientes de los operandos están a 1. En caso contrario, el bit es 0.

Sintaxis

AND-expresion & equality-expresion

Ejemplo:

int x = 10, y = 20;
int z = x & y;          // equivale a: int z = x bitand y;

XOR OR exclusivo ^ (palabra clave xor)

El funcionamiento de este operador binario es parecido al AND lógico, salvo que en este caso el resultado es 1 si ambos bits son complementarios (uno es 0 y el otro 1). En caso contrario devuelve 0.

Sintaxis

expr-OR-exclusiva ^ AND-expresion

Ejemplo

int x = 10, y = 20;
int z = x ^ y;        // equivale a: int z = x xor y;

OR inclusivo | (palabra clave bitor)

Este operador binario tiene un funcionamiento parecido a los anteriores (AND y XOR), salvo que en este caso el resultado es 1 si alguno de ellos está a 1. En caso contrario devuelve 0.

Sintaxis

expr-OR-inclusiva | expr-OR-exclusiva

Ejemplo

int x = 10, y = 20;
int z = x | y;        // equivale a:

Asignaciones compuestas con operadores de bits

Salvo el complemento a uno (~) que es unitario, los demás operadores de menejo de bits pueden combinarse con la asignación simple (=) para dar lugar a una asignación compuesta. El estándar C++ permite una representación explícita (mediante palabra clave) para alguna de estas asignaciones compuesta:

&=  and_eq
|=    or_eq
^=   xor_eq

Véase también

Fuente