~ 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
Este operador unitario invierte cada bit del operando; 0 es convertido en 1 y viceversa.
Ejemplo
int s1 = ~2;
La representación binaria de los los complementos a uno de los decimales 0, 1 y 2 son los que se expresan (para simplificar los representamos como un octeto):
0 == 0000 0000 ~ 0 == 1111 1111
1 == 0000 0001 ~ 1 == 1111 1110
2 == 0000 0010 ~ 2 == 1111 1101
<< 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.
Sintaxis
expr-desplazada << expr-desplazamiento
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
Ejemplo
long x = 10;
int y = 2;
long z = x << y;
El resultado del desplazamiento de 2 bits sobre el unsigned long x es asignado al unsigned long y sin que sea necesario ningún "casting" para el tipo resultante.
Según las premisas anteriores, los desplazamientos izquierda de valor unitario aplicados sobre los números 0, 1, 2 y -3, producen los siguientes resultados:
0 == 0000 0000 0 << 1 == 0000 0000 == 0
1 == 0000 0001 1 << 1 == 0000 0010 == 2
2 == 0000 0010 2 << 1 == 0000 0100 == 4
-3 == 1111 1101 -3 << 1 == 1111 1010 == - 6
>> Desplazamiento a derecha
Sintaxis
expr-desplazada >> expr-desplazamiento
Ejemplo:
long x = 10;
long z = x >> 2;
El patrón de bits de expr-desplazada sufre un desplazamiento derecho del valor indicado por la expr-desplazamiento. 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.
Por lo demás, el comportamiento de este operador es análogo al anterior (desplazamiento izquierda). Por ejemplo:
0 == 0000 0000 0 >> 1 == 0000 0000 == 0
2 == 0000 0010 2 >> 1 == 0000 0001 == 1
-2 == 1111 1110 -2 >> 1 == 1111 1111 == -1 (C++Builder & GNU-C++)
-16 == 1111 0000 -16 >> 2 == 1111 1100 == -4 (C++Builder & GNU-C++)
& AND lógico
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 devuelve 0 (ver ejemplo).
Sintaxis
AND-expresion & equality-expresion
Ejemplo:
int x = 10, y = 20;
int z = x & y;
En este caso el resultado del AND lógico entre los enteros 10 y 20 se aplicaría al entero z.
Según las reglas del enunciado, el operador & aplicado entre los valores 2 y -2 resultaría:
2 == 0000 0010
-2 == 1111 1110
------------------
0000 0010 == 2
^ XOR OR exclusivo
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.
expr-OR-exclusiva ^ AND-expresion
Ejemplo:
int x = 10, y = 20;
int z = x ^ y;
Según el enunciado, el operador ^ aplicado entre los valores 7 y -2 resultaría:
7 == 0000 0111
-2 == 1111 1110
------------------
1111 1001 == -7
| OR inclusivo
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 (ver ejemplo).
Sintaxis
expr-OR-inclusiva | expr-OR-exclusiva
Ejemplo:
int x = 10, y = 20;
int z = x | y;
Según el enunciado, el operador | aplicado entre los valores 6 y 13 resultaría:
6 == 0000 0110
13 == 0000 1101
------------------
0000 1111 == 15
jueves, 12 de febrero de 2009
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario