¿Qué son los operadores bit a bit?
OPERADORES BITWISE se utilizan para manipular datos a nivel de bits, también conocido como programación a nivel de bits. Bitwise opera en un patrón de uno o más 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.
La siguiente es una lista de operadores bit a bit que proporcionan el lenguaje de programación ‘C’:
Operador | Significado |
Y | Operador AND bit a bit |
| | Operador OR bit a bit |
^ | Operador OR Bitwise exclusivo |
~ | El operador complementario Binary One es un operador unificado |
< | Operador de cambio a la izquierda |
>> | Operador de transferencia correcto |
Los operadores bit a bit no se pueden aplicar directamente a tipos de datos primitivos como flotante, duplicado, etc. Recuerde siempre una cosa que los operadores bit a bit usan principalmente con el tipo de datos enteros debido a su compatibilidad.
Los operadores lógicos trabajan bit a bit en los datos bit a paso, comenzando desde el bit menos significativo, es decir, el bit LSB que es el bit correcto, trabajando hacia el MSB (Most Significant Bit) que es el bit izquierdo.
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á:
Y bit a bit
Este es uno de los operadores lógicos lógicos más utilizados. Se indica con una sola señal ampersand (&). Escribe dos oraciones enteras a cada lado del operador (&).
El resultado de la operación es bit a bit Y 1 si ambos bits tienen un valor de 1; de lo contrario, el resultado es siempre 0.
Consideremos que tenemos 2 variables op1 y op2 con los siguientes valores:
Op1 = 0000 1101 Op2 = 0001 1001
El resultado de la operación AND son las variables op1 y op2
Result = 0000 1001
Como podemos ver, se comparan dos variables paso a paso. Siempre que el valor de los bits en ambas variables sea 1, el resultado será otro 1 o 0.
O bit a bit
Se indica mediante un único signo de barra vertical (|). Se escriben dos oraciones enteras a cada lado del operador (|).
El resultado de la operación es OR 1 bit a bit si al menos un extremo de la expresión tiene un valor de 1; de lo contrario, el resultado siempre es 0.
Consideremos que tenemos 2 variables op1 y op2 con los siguientes valores:
Op1 = 0000 1101 Op2 = 0001 1001
El resultado de la operación es OR en las variables op1 y op2
Result = 0001 1101
Como podemos ver, se comparan dos variables paso a paso. Siempre que el valor de un bit en una de las variables sea 1, el resultado será otro 1 o 0.
OR exclusivo bit a bit
Muestra un símbolo (^). Se escriben dos oraciones enteras a cada lado del operador (^).
El resultado de la operación OR exclusivo bit a bit es 1 si un extremo de la expresión solo tiene 1; de lo contrario, el resultado es siempre 0.
Consideremos que tenemos 2 variables op1 y op2 con los siguientes valores:
Op1 = 0000 1101 Op2 = 0001 1001
El resultado de la operación es OR en las variables op1 y op2
Result = 0001 0100
Como podemos ver, se comparan dos variables paso a paso. Siempre que una variable no tenga un valor de 1, el resultado de otro 0 será 0.
Escribamos un programa simple que muestre operadores lógicos bit a bit.
#include <stdio.h> int 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 %dn", c ); c = a | b; /* 21 = 010101 */ printf("OR - Value of c is %dn", c ); c = a ^ b; /* 1 = 0001 */ printf("Exclusive-OR - Value of c is %dn", c ); getch(); }
Producción:
AND - Value of c is 20 OR - Value of c is 21 Exclusive-OR - Value of c is 1
Operadores de transferencia bit a bit
Los operadores de transferencia bit a bit se utilizan para mover / desplazar los patrones de bit hacia la izquierda o hacia la derecha. A la izquierda y a la derecha hay dos operadores de turno con una ‘C’ que se muestra a continuación:
Operand << n (Left Shift) Operand >> n (Right Shift)
Seo
- una ópera es una expresión entera sobre la que debemos realizar la operación de transferencia.
- ‘N’ es el número total de posiciones de bits que necesitamos cambiar en la expresión entera.
La operación de desplazamiento a la izquierda cambiará el número de ‘n’ bits a la izquierda. Los bits más a la izquierda de la oración rebotarán y n bits se llenarán con el valor 0 a la derecha.
La operación de transferencia correcta cambiará el número de ‘n’ bits a la derecha. Los ‘n’ bits correctos en la oración se rebotarán y el valor 0 se completará a la izquierda.
Ejemplo: x es una expresión entera con datos 1111. Después de una operación de transferencia, resultará en:
x << 2 (left shift) = 1111<<2 = 1100 x>>2 (right shift) = 1111>>2 = 0011
A continuación, se pueden combinar los operadores de transferencia que se pueden utilizar para extraer los datos de la expresión entera. Escribamos un programa para ilustrar el uso de operadores de transferencia bit a bit.
#include <stdio.h> int main() { int a = 20; /* 20 = 010100 */ int c = 0; c = a << 2; /* 80 = 101000 */ printf("Left shift - Value of c is %dn", c ); c = a >> 2; /*05 = 000101 */ printf("Right shift - Value of c is %dn", c ); return 0; }
Producción:
Left shift - Value of c is 80 Right shift - Value of c is 5
Después de realizar la operación de transferencia izquierda, el equivalente binario de 101000 es 80.
Después de realizar la operación de transferencia correcta, el equivalente binario de 000101 es 5.
Operador bit a bit completado
El complemento bit a bit también se denomina operador de relleno, ya que siempre solo toma un valor o una opera. Es un operador unario.
Cuando completamos un bit, todos los 1 y viceversa se convierten en 0í.
Si tenemos una expresión entera que contiene 0000 1111, entonces el valor es 1111 0000 después de realizar una operación de finalización bit a bit.
El símbolo de tilde (~) se indica con el operador de tasa de bits.
Escribamos un programa que demuestre la implementación de un operador de relleno bit a bit.
#include <stdio.h> int main() { int a = 10; /* 10 = 1010 */ int c = 0; c = ~(a); printf("Complement - Value of c is %dn", c ); return 0; }
Producción:
Complement - Value of c is -11
Aquí hay otro programa, con un ejemplo de todas las óperas discutidas hasta ahora:
#include <stdio.h> main() { 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 = %dn", z ); z = x | y; /* 61 = 0011 1101 */ printf("Bitwise OR Operator - x | y = %dn", z ); z= x^y; /* 61 = 0011 1101 */ printf("Bitwise XOR Operator- x^y= %dn", z); z = ~x; /*-61 = 1100 0011 */ printf("Bitwise One's Complement Operator - ~x = %dn", z); z = x << 2; /* 192 = 1100 0000 */ printf("Bitwise Left Shift Operator x << 2= %dn", z ); z= x >> 2; /* 12 = 0000 1100 */ printf ("Bitwise Right Shift Operator x >> 2= %dn", z );}
Después de compilar y ejecutar el programa, produce el siguiente resultado:
Bitwise AND Operator - x & y = 0 Bitwise OR Operator - x | y = 61 Bitwise XOR Operator- x^y= 61 Bitwise One's Complement Operator - ~x = -49 Bitwise Left Shift Operator x << 2= 192 Bitwise Right Shift Operator x >> 2= 12
Resumen
- Los operadores bit a bit son operadores especiales que proporcionan ‘C.’
- Se utilizan en programas de nivel de bits.
- Estos operadores se utilizan para manipular bits de expresión de números enteros.
- Lógico, transferencia y complemento son tres tipos de operadores bit a bit.
- Se utiliza un operador de relleno de bits para invertir los bits de expresión.