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 1
algum 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)
OR
Operaçã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 0
algum 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 - 27
como saída quando esperávamos 229
. Por quê isso aconteceu?
Isso acontece porque o valor binário 11100101
que 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 n
será -(n+1)
.
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 -27
vez 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