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)
OR
Operació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 - 27
como salida cuando estábamos esperando 229
. ¿Por qué pasó esto?
Sucede porque el valor binario 11100101
que esperamos 229
es 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 n
será -(n+1)
.
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 26
es 229 (en decimal) y el complemento a 2 de 229
es -27
. Por lo tanto, la salida es en -27
lugar 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