Operadores bit a bit de C #: operaciones Y, O, XOR, Complemento y Cambio

En este tutorial, aprenderemos en detalle sobre los operadores bit a bit y bit shift en C #. C # proporciona 4 operadores de desplazamiento bit a bit y 2 bit.

Los operadores bit a bit y bit shift se utilizan para realizar operaciones a nivel de bit en datos enteros (int, long, etc.) y booleanos. Estos operadores no se usan comúnmente en situaciones de la vida real.

Si está interesado en explorar más, visite aplicaciones prácticas de operaciones bit a bit.

Los operadores bit a bit y de desplazamiento de bits disponibles en C # se enumeran a continuación.

Lista de operadores bit a bit de C #
Operador Nombre del operador
~ Complemento bit a bit
Y Y bit a bit
| O bit a bit
^ OR exclusivo bit a bit (XOR)
<< Desplazamiento a la izquierda bit a bit
>> Desplazamiento a la derecha bit a bit

O bit a bit

El operador OR bit a bit está representado por |. Realiza una operación OR bit a bit en los bits correspondientes de dos operandos. Si alguno de los bits es 1, el resultado es 1. De lo contrario, el resultado es 0.

Si los operandos son de tipo bool, la operación OR bit a bit es equivalente a la operación OR lógica entre ellos.

Por ejemplo,

 14 = 00001110 (en binario) 11 = 00001011 (en binario)

OROperación bit a bit entre 14 y 11:

 00001110 00001011 -------- 00001111 = 15 (en decimal)

Ejemplo 1: OR bit a bit

 using System; namespace Operator ( class BitWiseOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber | secondNumber; Console.WriteLine("(0) | (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Cuando ejecutamos el programa, la salida será:

14 | 11 = 15

Y bit a bit

El operador AND bit a bit está representado por &. Realiza una operación AND bit a bit en los bits correspondientes de dos operandos. Si alguno de los bits es 0, el resultado es 0. De lo contrario, el resultado es 1.

Si los operandos son de tipo bool, la operación AND bit a bit es equivalente a la operación AND lógica entre ellos.

Por ejemplo,

 14 = 00001110 (en binario) 11 = 00001011 (en binario)

Operación AND bit a bit entre 14 y 11:

 00001110 00001011 -------- 00001010 = 10 (en decimal)

Ejemplo 2: AND bit a bit

 using System; namespace Operator ( class BitWiseAND ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber & secondNumber; Console.WriteLine("(0) & (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Cuando ejecutamos el programa, la salida será:

 14 y 11 = 10

XOR bit a bit

El operador XOR bit a bit está representado por ^. Realiza una operación XOR bit a bit en los bits correspondientes de dos operandos. Si los bits correspondientes son iguales , el resultado es 0. Si los bits correspondientes son diferentes , el resultado es 1.

Si los operandos son de tipo bool, la operación XOR bit a bit es equivalente a la operación XOR lógica entre ellos.

Por ejemplo,

 14 = 00001110 (en binario) 11 = 00001011 (en binario)

Operación XOR bit a bit entre 14 y 11:

 00001110 00001011 -------- 00000101 = 5 (en decimal)

Si desea obtener más información sobre el uso de Bitwise XOR, visite The Magic of XOR

Ejemplo 3: XOR bit a bit

 using System; namespace Operator ( class BitWiseXOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber^secondNumber; Console.WriteLine("(0) (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Cuando ejecutamos el programa, la salida será:

 14 11 = 5

Complemento bit a bit

El operador Bitwise Complement está representado por ~. Es un operador unario, es decir, opera en un solo operando. El ~operador invierte cada bit, es decir, cambia 1 a 0 y 0 a 1.

Por ejemplo,

 26 = 00011010 (en binario)

Operación de complemento bit a bit en 26:

 ~ 00011010 = 11100101 = 229 (en decimal)

Ejemplo 4: Complemento bit a bit

 using System; namespace Operator ( class BitWiseComplement ( public static void Main(string() args) ( int number = 26, result; result = ~number; Console.WriteLine("~(0) = (1)", number, result); ) ) ) 

Cuando ejecutamos el programa, la salida será:

 ~ 26 = -27

Conseguimos - 27como salida cuando estábamos esperando 229. ¿Por qué pasó esto?

Sucede porque el valor binario 11100101que esperamos 229es en realidad una representación en complemento a 2 de -27. Los números negativos en computadora se representan en la representación del complemento a 2.

Para cualquier número entero n, el complemento a 2 de nserá -(n+1).

Complemento de 2
Decimal Binario Complemento de 2
0 00000000 - (11111111 + 1) = -00000000 = -0 (en decimal)
1 00000001 - (11111110 + 1) = -11111111 = -256 (en decimal)
229 11100101 - (00011010 + 1) = -00011011 = -27

Los valores de desbordamiento se ignoran en complemento a 2.

El complemento bit a bit de 26es 229 (en decimal) y el complemento a 2 de 229es -27. Por lo tanto, la salida es en -27lugar de 229.

Desplazamiento a la izquierda bit a bit

El operador de desplazamiento a la izquierda bit a bit está representado por <<. El <<operador desplaza un número a la izquierda en un número específico de bits. Se agregan ceros a los bits menos significativos.

En decimal, es equivalente a

 num * 2 bits

Por ejemplo,

 42 = 101010 (en binario)

Operación Bitwise Lift Shift en 42:

 42 << 1 = 84 (En binario 1010100) 42 << 2 = 168 (En binario 10101000) 42 << 4 = 672 (En binario 1010100000)

Ejemplo 5: Desplazamiento a la izquierda bit a bit

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)<<1 = (1)", number, number<<1); Console.WriteLine("(0)<<2 = (1)", number, number<<2); Console.WriteLine("(0)<<4 = (1)", number, number<<4); ) ) ) 

Cuando ejecutamos el programa, la salida será:

 42 << 1 = 84 42 << 2 = 168 42 << 4 = 672

Desplazamiento a la derecha bit a bit

El operador de desplazamiento a la izquierda bit a bit está representado por >>. El >>operador desplaza un número a la derecha en un número específico de bits. El primer operando se desplaza hacia la derecha por el número de bits especificado por el segundo operando.

En decimal, es equivalente a

 piso (num / 2bits)

Por ejemplo,

 42 = 101010 (en binario)

Operación Bitwise Lift Shift en 42:

 42 >> 1 = 21 (En binario 010101) 42 >> 2 = 10 (En binario 001010) 42 >> 4 = 2 (En binario 000010)

Ejemplo 6: Desplazamiento a la derecha bit a bit

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)>>1 = (1)", number, number>>1); Console.WriteLine("(0)>>2 = (1)", number, number>>2); Console.WriteLine("(0)>>4 = (1)", number, number>>4); ) ) ) 

Cuando ejecutamos el programa, la salida será:

 42 >> 1 = 21 42 >> 2 = 10 42 >> 4 = 2

Articulos interesantes...