Operadores bit a bit C #: AND, OR, XOR, operações de complemento e deslocamento

Neste tutorial, aprenderemos em detalhes sobre os operadores bit a bit e bit shift em C #. C # fornece 4 operadores bit a bit e 2 bit shift.

Operadores bit a bit e bit shift são usados ​​para realizar operações de nível de bit em dados inteiros (int, long, etc) e booleanos. Esses operadores não são comumente usados ​​em situações da vida real.

Se você estiver interessado em explorar mais, visite as aplicações práticas das operações bit a bit.

Os operadores bit a bit e bit shift disponíveis em C # estão listados abaixo.

Lista de operadores bit a bit C #
Operador Nome do operador
~ Complemento bit a bit
E E bit a bit
| OR bit a bit
^ OR exclusivo bit a bit (XOR)
<< Shift à esquerda bit a bit
>> Shift à direita bit a bit

OR bit a bit

O operador OR bit a bit é representado por |. Ele executa a operação OR bit a bit nos bits correspondentes de dois operandos. Se 1algum dos bits for , o resultado será 1. Caso contrário, o resultado é 0.

Se os operandos forem do tipo bool, a operação OR bit a bit é equivalente à operação OR lógica entre eles.

Por exemplo,

 14 = 00001110 (em binário) 11 = 00001011 (em binário)

OROperação bit a bit entre 14 e 11:

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

Exemplo 1: bit a bit OR

 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); ) ) ) 

Quando executamos o programa, a saída será:

14 11 = 15

E bit a bit

O operador AND bit a bit é representado por &. Ele executa a operação bit a bit AND nos bits correspondentes de dois operandos. Se 0algum dos bits for , o resultado será 0. Caso contrário, o resultado é 1.

Se os operandos forem do tipo bool, a operação AND bit a bit é equivalente à operação AND lógica entre eles.

Por exemplo,

 14 = 00001110 (em binário) 11 = 00001011 (em binário)

Operação AND bit a bit entre 14 e 11:

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

Exemplo 2: bit a bit AND

 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); ) ) ) 

Quando executamos o programa, a saída será:

 14 e 11 = 10

XOR bit a bit

O operador XOR bit a bit é representado por ^. Ele executa a operação XOR bit a bit nos bits correspondentes de dois operandos. Se os bits correspondentes forem iguais , o resultado será 0. Se os bits correspondentes forem diferentes , o resultado será 1.

Se os operandos forem do tipo bool, a operação XOR bit a bit é equivalente à operação XOR lógica entre eles.

Por exemplo,

 14 = 00001110 (em binário) 11 = 00001011 (em binário)

Operação de XOR bit a bit entre 14 e 11:

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

Se você quiser mais informações sobre o uso do Bitwise XOR, visite The Magic of XOR

Exemplo 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); ) ) ) 

Quando executamos o programa, a saída será:

 14 11 = 5

Complemento bit a bit

O operador Bitwise Complement é representado por ~. É um operador unário, ou seja, opera em apenas um operando. O ~operador inverte cada bit, ou seja, muda de 1 para 0 e 0 para 1.

Por exemplo,

 26 = 00011010 (em binário)

Operação de complemento bit a bit em 26:

 ~ 00011010 = 11100101 = 229 (em decimal)

Exemplo 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); ) ) ) 

Quando executamos o programa, a saída será:

 ~ 26 = -27

Recebemos - 27como saída quando esperávamos 229. Por quê isso aconteceu?

Isso acontece porque o valor binário 11100101que esperamos ser 229é, na verdade, uma representação de complemento de 2 de -27. Os números negativos no computador são representados na representação do complemento de 2.

Para qualquer inteiro n, o complemento de 2 de nserá -(n+1).

Complemento de 2
Decimal Binário Complemento de 2
0 00000000 - (11111111 + 1) = -00000000 = -0 (em decimal)
1 00000001 - (11111110 + 1) = -11111111 = -256 (em decimal)
229 11100101 - (00011010 + 1) = -00011011 = -27

Os valores de estouro são ignorados no complemento de 2.

O complemento bit a bit de 26é 229 (em decimal) e o complemento de 2 229é -27. Portanto, a saída é em -27vez de 229.

Shift à esquerda bit a bit

O operador de deslocamento para a esquerda bit a bit é representado por <<. O <<operador desloca um número para a esquerda por um número especificado de bits. Zeros são adicionados aos bits menos significativos.

Em decimal, é equivalente a

 num * 2bits

Por exemplo,

 42 = 101010 (em binário)

Operação Bitwise Lift Shift em 42:

 42 << 1 = 84 (no binário 1010100) 42 << 2 = 168 (no binário 10101000) 42 << 4 = 672 (no binário 1010100000)

Exemplo 5: deslocamento à esquerda 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); ) ) ) 

Quando executamos o programa, a saída será:

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

Shift à direita bit a bit

O operador de deslocamento para a esquerda bit a bit é representado por >>. O >>operador desloca um número para a direita por um número especificado de bits. O primeiro operando é deslocado para a direita pelo número de bits especificado pelo segundo operando.

Em decimal, é equivalente a

 andar (num / 2bits)

Por exemplo,

 42 = 101010 (em binário)

Operação Bitwise Lift Shift em 42:

 42 >> 1 = 21 (no binário 010101) 42 >> 2 = 10 (no binário 001010) 42 >> 4 = 2 (no binário 000010)

Exemplo 6: deslocamento para a direita 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); ) ) ) 

Quando executamos o programa, a saída será:

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

Artigos interessantes...