Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Operadores bit a bit en C:AND, OR, XOR, Shift y Complement

¿Qué son los operadores bit a bit?

Operadores bit a bit se utilizan para manipular datos a nivel de bit, también llamada programación a nivel de bit. 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.

La siguiente es la lista de operadores bit a bit proporcionados por el lenguaje de programación 'C':

Operador Significado & Operador AND bit a bit| Operador OR bit a bit^ Operador OR exclusivo bit a bit~ El operador complemento a uno binario es un operador unario< Operador de desplazamiento a la izquierda>> Operador de turno 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 en 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 (bit más significativo) 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 tabla siguiente.

x y x e y x | y x ^ y 0 00000 10111 00111 1110

En este tutorial, aprenderá-

  • ¿Qué son los operadores bit a bit?
  • Bitbit Y
  • Bitbit O
  • Exclusivo bit a bit O
  • Operadores de desplazamiento bit a bit
  • Operador de complemento bit a bit

Bitbit Y

Este es uno de los operadores lógicos bit a bit más utilizados. Se representa con un único signo de y 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 valores como sigue:

Op1 = 0000 1101
Op2 = 0001 1001

El resultado de la operación AND sobre las variables op1 y op2 será

Result = 0000 1001

Como podemos ver, se comparan dos variables poco a poco. Siempre que el valor de un bit en ambas variables sea 1, el resultado será 1 o 0.

Bitbit O

Está representado por un único 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 valores como sigue:

Op1 = 0000 1101
Op2 = 0001 1001

El resultado de la operación OR sobre las variables op1 y op2 será

Result = 0001 1101

Como podemos ver, se comparan dos variables poco a poco. Siempre que el valor de un bit en una de las variables sea 1, el resultado será 1 o 0.

Exclusivo bit a bit O

Se representa con un símbolo (^). Se escriben dos expresiones enteras a cada lado del operador (^).

El resultado de la operación OR exclusiva 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 valores como sigue:

Op1 = 0000 1101
Op2 = 0001 1001

El resultado de la operación XOR en las variables op1 y op2 será

Result = 0001 0100

Como podemos ver, se comparan dos variables poco a poco. Siempre que una sola variable tenga el valor 1, el resultado es 0; de lo contrario, el resultado será 0.

Escribamos un programa simple que demuestre 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 %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();
}

Salida:

AND - Value of c is 20
OR - Value of c is 21
Exclusive-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 bits hacia el lado izquierdo o derecho. Izquierda y derecha son dos operadores de desplazamiento 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 bit que tenemos que desplazar 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 rellenará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 bits 'n' más a la derecha en la expresión aparecerán y el valor 0 se completará 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 = 1100
x>>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 <stdio.h>
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;
}

Salida:

Left shift - Value of c is 80
Right shift - Value of c is 5

Después de realizar la operación de desplazamiento a la izquierda, el valor será 80 cuyo equivalente binario es 101000.

Después de realizar la operación de desplazamiento 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 indica con el símbolo tilde (~).

Escribamos un programa que demuestre la implementación del operador de complemento bit a bit.

#include <stdio.h>
int main() {
   int a = 10;	/* 10 = 1010 */  
   int c = 0;           
   c = ~(a);      
   printf("Complement - Value of c is %d\n", c );
   return 0;
}

Salida:

Complement - Value of c is -11

Aquí hay otro programa, con un ejemplo de todas las operaciones 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 = %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;          /*-49 = 11001111 */
   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 = 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 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.

Lenguaje C

  1. Clase y objeto de C#
  2. Clase y método abstractos de C#
  3. C# Clase parcial y método parcial
  4. Clase y método sellados de C#
  5. Operadores de C++
  6. C Palabras clave e identificadores
  7. Operadores de programación en C
  8. IoT y blockchain:un cambio de paradigma
  9. Operadores en C++ con Ejemplo:Qué es, Tipos y Programas
  10. Operadores de Python:Aritmética, Lógica, Comparación, Asignación, Bit a Bit y Precedencia
  11. C - Constantes y Literales