Operaciones a nivel de bits

Complemento a uno

Complemento del valor de la variable a uno. El valor de la expresión contiene 1 en todos los dígitos donde el valor de la variable contiene 0, y 0 en todos los dígitos donde el valor de la variable contiene 1.

b = ~n;

Ejemplo:

   char a='a',b;
   b=~a;
   Print("a = ",a, "  b = ",b);  
// Resultado va a ser el siguiente::
// a = 97   b = -98

Desplazamiento a la derecha

La representación binaria de x se desplaza a la derecha a y dígitos. Si el valor desplazado posee el tipo sin signos, entonces se realiza el desplazamiento lógico a la derecha, es decir, los dígitos liberados por la izquierda se rellenan con ceros.

Pero si el valor desplazado tiene el tipo de signo, entonces se realiza el desplazamiento aritmético a la derecha, es decir, los dígitos liberados por la izquierda van a ser rellenados con el valor del bit de signo (si el número es positivo, el valor del bit de signo es igual a 0; si el número es negativo, el valor del bit de signo es igual a 1)

x = x >> y;

Ejemplo:

   char a='a',b='b';
   Print("Before:  a = ",a, "  b = ",b); 
//--- hagamos el desplazamiento a la derecha   
   b=a >> 1;
   Print("After:   a = ",a, "  b = ",b); 
// Resultado va a ser el siguiente:
// Before:  a = 97   b = 98
// After:   a = 97   b = 48

Desplazamiento a la izquierda

La representación binaria de x se desplaza a la izquierda a y dígitos, rellenándose los dígitos liberados por la derecha con ceros.

x = x << y;

Ejemplo:

   char a='a',b='b';
   Print("Before:  a = ",a, "  b = ",b); 
//--- hagamos el desplazamiento a la izquierda   
   b=a << 1;
   Print("After:   a = ",a, "  b=",b); 
// Resultado va a ser el siguiente:
// Before:  a = 97   b = 98
// After:   a = 97   b = -62

No se recomienda realizar el desplazamiento a más o igual cantidad de bits que la longitud de la variable desplazada, puesto que el resultado de dicha operación no está definido.

Operación a nivel de bits AND

Operación a nivel de bits AND de las representaciones binarias y y x. El valor de la expresión contiene 1 (VERDADERO) en todos los dígitos en los que como x, tanto y no contienen ceros; y 0 (FALSO) en los demás dígitos.

b = ((x & y) != 0);

Ejemplo:

   char a='a',b='b';
//--- operación AND
   char c=a&b;
   Print("a = ",a,"  b = ",b);
   Print("a & b = ",c);
// Resultado va a ser el siguiente:
// a = 97   b = 98
// a & b = 96

Operación a nivel de bits OR

Operación a nivel de bits OR de las representaciones binarias y y x. El valor de la expresión contiene 1 en todos los dígitos en los que x o y no contienen 0; y 0 en todos los demás dígitos.

b = x | y;

Ejemplo:

   char a='a',b='b';
//--- operación OR
   char c=a|b;
   Print("a = ",a,"  b = ",b);
   Print("a | b = ",c);
// Resultado va a ser el siguiente:
// a = 97   b = 98
// a | b = 99

Operación a nivel de bits excluyendo OR

Operación a nivel de bit excluyendo AND (eXclusive OR) de las representaciones binarias y y x. El valor de la expresión contiene 1 en los dígitos en los que x y y poseen los valores binarios diferentes; y 0 en todos los demás dígitos.

b = x ^ y;

Ejemplo:

   char a='a', b='b';
//--- operación excluyendo OR
   char c=a^b;
   Print("a = ",a,"  b = ",b);
   Print("a ^ b = ",c);
// Resultado va a ser el siguiente:
// a = 97   b = 98
// a ^ b = 3

Operaciones a nivel de bits se realizan unicamente con los números enteros.

Véase también

Prioridades y orden de las operaciones