¿Qué son los operadores bit a bit?
Los OPERADORES BITWISE se utilizan para manipular datos a nivel de bits, también llamado programación a nivel de bits. Bitwise opera en uno o más patrones de bits o números binarios al nivel de sus bits individuales. Se utilizan en cálculos numéricos para acelerar el proceso de cálculo.
A continuación se muestra la lista de operadores bit a bit proporcionada por el lenguaje de programación 'C':
Operador | Sentido |
Y | Operador AND bit a bit |
| | Operador OR bit a bit |
^ | Operador OR exclusivo bit a bit |
~ | El operador de complemento de Binary One es un operador unario |
<< | Operador de cambio a la izquierda |
>> | Operador de cambio a la derecha |
Los operadores bit a bit no se pueden aplicar directamente a tipos de datos primitivos como float, double, etc. Recuerde siempre que los operadores bit a bit se utilizan principalmente con el tipo de datos entero debido a su compatibilidad.
Los operadores lógicos bit a bit trabajan sobre los datos bit a bit, comenzando desde el bit menos significativo, es decir, el bit LSB que es el bit más a la derecha, trabajando hacia el MSB (Most Significant Bit) que es el bit más a la izquierda.
El resultado del cálculo de los operadores lógicos bit a bit se muestra en la siguiente tabla.
X | y | x & y | x | y | x y |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
En este tutorial, aprenderá:
- ¿Qué son los operadores bit a bit?
- Y bit a bit
- O bit a bit
- OR exclusivo bit a bit
- Operadores de desplazamiento bit a bit
- Operador de complemento bit a bit
Y bit a bit
Este es uno de los operadores lógicos bit a bit más utilizados. Está representado por un único signo comercial (&). Se escriben dos expresiones enteras a cada lado del operador (&).
El resultado de la operación AND bit a bit es 1 si ambos bits tienen el valor 1; de lo contrario, el resultado siempre es 0.
Consideremos que tenemos 2 variables op1 y op2 con los siguientes valores:
Op1 = 0000 1101Op2 = 0001 1001
El resultado de la operación AND en las variables op1 y op2 será
Result = 0000 1001
Como podemos ver, dos variables se comparan poco a poco. Siempre que el valor de un bit en ambas variables sea 1, el resultado será 1 o 0.
O bit a bit
Está representado por un solo signo de barra vertical (|). Se escriben dos expresiones enteras a cada lado del operador (|).
El resultado de la operación OR bit a bit es 1 si al menos una de las expresiones tiene el valor 1; de lo contrario, el resultado siempre es 0.
Consideremos que tenemos 2 variables op1 y op2 con los siguientes valores:
Op1 = 0000 1101Op2 = 0001 1001
El resultado de la operación OR en las variables op1 y op2 será
Result = 0001 1101
Como podemos ver, dos variables se comparan poco a poco. Siempre que el valor de un bit en una de las variables sea 1, el resultado será 1 o 0.
OR exclusivo bit a bit
Está representado por un símbolo (^). Se escriben dos expresiones enteras a cada lado del operador (^).
El resultado de la operación OR exclusivo bit a bit es 1 si solo una de las expresiones tiene el valor 1; de lo contrario, el resultado siempre es 0.
Consideremos que tenemos 2 variables op1 y op2 con los siguientes valores:
Op1 = 0000 1101Op2 = 0001 1001
El resultado de la operación OR en las variables op1 y op2 será
Result = 0001 0100
Como podemos ver, dos variables se comparan poco a poco. Siempre que solo una variable tenga el valor 1, entonces el resultado es 0; de lo contrario, 0 será el resultado.
Escribamos un programa simple que demuestre operadores lógicos bit a bit.
#includeint main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}
Producción:
AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1
Operadores de desplazamiento bit a bit
Los operadores de desplazamiento bit a bit se utilizan para mover / desplazar los patrones de bit hacia la izquierda o hacia la derecha. Izquierda y derecha son dos operadores de turno proporcionados por 'C' que se representan de la siguiente manera:
Operand << n (Left Shift)Operand >> n (Right Shift)
Aquí,
- un operando es una expresión entera en la que tenemos que realizar la operación de desplazamiento.
- 'n' es el número total de posiciones de bits que tenemos que cambiar en la expresión entera.
La operación de desplazamiento a la izquierda desplazará el número 'n' de bits hacia el lado izquierdo. Los bits más a la izquierda de la expresión aparecerán y los n bits con el valor 0 se completarán en el lado derecho.
La operación de desplazamiento a la derecha desplazará el número 'n' de bits hacia el lado derecho. Los 'n' bits más a la derecha de la expresión aparecerán y el valor 0 se rellenará en el lado izquierdo.
Ejemplo: x es una expresión entera con datos 1111. Después de realizar la operación de cambio, el resultado será:
x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011
Los operadores de turnos se pueden combinar y luego se pueden usar para extraer los datos de la expresión entera. Escribamos un programa para demostrar el uso de operadores de desplazamiento bit a bit.
#includeint main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}
Producción:
Left shift - Value of c is 80Right shift - Value of c is 5
Después de realizar la operación de desplazamiento a la izquierda, el valor se convertirá en 80 cuyo equivalente binario es 101000.
Después de realizar la operación de cambio a la derecha, el valor se convertirá en 5 cuyo equivalente binario es 000101.
Operador de complemento bit a bit
El complemento bit a bit también se denomina operador de complemento a uno, ya que siempre toma solo un valor o un operando. Es un operador unario.
Cuando realizamos el complemento en cualquier bit, todos los 1 se convierten en 0 y viceversa.
Si tenemos una expresión entera que contiene 0000 1111, luego de realizar la operación de complemento bit a bit, el valor se convertirá en 1111 0000.
El operador de complemento bit a bit se denota mediante el símbolo tilde (~).
Escribamos un programa que demuestre la implementación del operador de complemento bit a bit.
#includeint main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}
Producción:
Complement - Value of c is -11
Aquí hay otro programa, con un ejemplo de todos los operatoes discutidos hasta ahora:
#includemain() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}
Después de compilar y ejecutar el programa, produce el siguiente resultado:
Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise Right Shift Operator x >> 2= 12
Resumen
- Los operadores bit a bit son un conjunto de operadores especiales proporcionado por 'C.'
- Se utilizan en la programación a nivel de bits.
- Estos operadores se utilizan para manipular bits de una expresión entera.
- Lógico, desplazamiento y complemento son tres tipos de operadores bit a bit.
- El operador de complemento bit a bit se utiliza para invertir los bits de una expresión.