C Operadores bit a bit: AND, OR, XOR, Shift & Complemento (con ejemplo)

Tabla de contenido:

Anonim

¿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.

#include 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 %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.

#include int 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.

#include int 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:

#include 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 = %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.