Está en la página 1de 2

Repblica Bolivariana de Venezuela Universidad Nacional Experimental Martima del Caribe (UMC) Coord.

Ciencias Aplicadas Ingeniera Martima Informtica I Prof. Luca Santeramo

OPERADORES BINARIOS EN C++


C++ dispone de 6 operadores para manejo de bits que realizan dos tipos de operaciones:

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

( ~ ) Complemento a uno. Sintaxis: ~cast-expresion. Este operador unitario invierte cada bit del operando. 0 es convertido en 1 y viceversa.
Representacin binaria 0 = = 0000 0000 1 = = 0000 0001 2 = = 0000 0010 Invertido ~ 0 = = 1111 1111 ~ 1 = = 1111 1110 ~ 2 = = 1111 1101 Proceso -1 = = 1111 1110 + 0000 0001 = = 1111 1111 -2 = = 1111 1101 + 0000 0001 = = 1111 1110 -3 = = 1111 1100 + 0000 0001 = = 1111 1101 Resultado ~ 0 = = -1 ~ 1 = = -2 ~ 2 = = -3

#include <iostream.h> short signed cero = 0, uno = 1, dos = 2; int main (void) { cout << "~0 == " << ~cero << endl; cout << "~1 == " << ~uno << endl; cout << "~2 == " << ~dos << endl;

( << ) Desplazamiento a izquierda. Sintaxis: expr-desplazada << expr-desplazamiento. Este operador binario realiza un desplazamiento de bits a la izquierda. El bit ms significativo (ms a la izquierda) se pierde, y se le asigna un 0 al menos significativo (el de la derecha). El operando derecho indica el nmero de desplazamientos que se realizarn. 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 lgicos en contraposicin a los cclicos o rotacionales.
0 1 2 -3 == == == == 0000 0000 0000 0001 0000 0010 1111 1101 0 << 1 1 << 1 2 << 1 -3 << 1 == == == == 0000 0000 0000 0010 0000 0100 1111 1010 == 0 == 2 == 4 ==-6
#include <iostream.h> short signed cero = 0, int main (void) { cout << "0 << 1 == " cout << "1 << 1 == " cout << "2 << 1 == " uno = 1, dos = 2; << (cero << 1) << endl; << (uno<< 1) << endl; << (dos << 1) << endl; }

( >> ) Desplazamiento a derecha. Sintaxis: expr-desplazada >> expr-desplazamiento. El patrn de bits de exprdesplazada sufre un desplazamiento derecho del valor indicado por la expr-desplazamiento. Como en el caso anterior, ambos operandos deben ser nmeros enteros o enumeraciones. En caso contrario, el compilador realiza una conversin automtica 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 implementacin). El bit menos significativo (a la derecha) se pierde, pero hay que advertir que si exprdesplazada es un entero con signo y es negativo, el resultado depende de la implementacin.
0 = = 0000 0000 2 = = 0000 0010 -2 = = 1111 1110 -16 = = 1111 0000 0 >>1 = = 0000 0000 = = 0 2 >> 1 = = 0000 0001 = = 1 -2 >> 1 = = 1111 1111 = = -1 -16 >> 2 = = 1111 1100 = = -4
#include <iostream.h> short signed cero = 0, dos = 2, mdos = -2; int main (void) { cout << "0 >> 1 == " << (cero >> 1) << endl; cout << "2 >> 1 == " << (dos >> 1) << endl; cout << "-2 >> 1 == " << (mdos >> 1) << endl; }

( & ) AND, compara dos bits. Sintaxis. AND-expresion & equality-expresion. 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 estn a 1. En caso contrario devuelve 0.
2 == 0000 0010 -2 == 1111 1110 -----------------0000 0010 = = 2
#include <iostream.h> int main (void) { cout << "2 & -2 == " << (2 & -2) << endl;}

( ^ ) XOR (OR exclusivo), compara dos bits. Sintaxis: expr-OR-exclusiva ^ AND-expresion. El funcionamiento de este
operador binario es parecido al AND lgico, 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. 7 = = 0000 0111 -2 = = 1111 1110 -----------------1111 1001 = = -7
#include <iostream.h> int main (void) { cout << "7 ^ -2 == " << (7 ^ -2) << endl;}

( | ) OR inclusivo, compara dos bits. Sintaxis: expr-OR-inclusiva | expr-OR-exclusiva. 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.
6 = = 0000 0110 13 = = 0000 1101 -----------------0000 1111 = = 15
#include <iostream.h> int main (void) { cout << "6 | 13 == " << (6 | 13) << endl;}

Asignaciones compuestas con operadores de bits. Salvo el complemento a uno (~) que es unitario, los dems operadores de

menejo de bits pueden combinarse con la asignacin simple (=) para dar lugar a una asignacin compuesta. x &= y; // equivale a: x = (x & y); x ^=y; // equivale a: x = (x ^ y); x |= y; // equivale a: x = (x | y); x <<= y; // equivale a: x = (x << y); x >>= y; // equivale a: x = (x >> y);
#include <iostream.h> int main() { signed int x = 2, y = 7, z = 6, a x &= -2; y ^= -2; z |= 13; a <<= 1; b >>= 1; cout << "Valor x = " << x << endl cout << "Valor z = " << z << ende cout << "Valor b = " << b <<endl;

= 2, b= -2;

<< "Valor y = " << y << endl; << "Valor a = " << a << endl; }

Cuadro sinptico con los resultados de aplicar los operadores AND, XOR y OR entre dos enteros caractersticos (los valores 0 y 1):
A 0 1 0 1 B 0 0 1 1 A& B 0 0 0 1 A^ B 0 1 1 0 A|B 0 1 1 1

También podría gustarte