Y, O, XOR, Transferencia y finalización (por ejemplo)

La siguiente es una lista de operadores bit a bit que proporcionan el lenguaje de programación ‘C’:

OperadorSignificado
YOperador 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.

Xyx & yx | yx ^ y
00000
01011
10011
11110

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

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *