Operadores de manejo de bits
|
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
- Operadores
- Operadores aritméticos
- Operadores lógicos
- Operador condicional
- Operador coma
- Operadores relacionales
- Operadores de asignación
- Operadores de modelado de tipos
- Operadores añadidos a expresión
- Operador de acceso a ámbito
- Operadores de puntero
- Operador new
- Operador delete
- Operador sizeof
- Operador typeid
- Operador de preproceso