Operadores C# Bitwise e Bit Shift
Operadores C# Bitwise e Bit Shift
Neste tutorial, aprenderemos em detalhes sobre os operadores bit a bit e bit shift em C#. C# fornece operadores de deslocamento de 4 bits e 2 bits.
Os 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 aplicações práticas de operações bit a bit.
Os operadores bit a bit e bit shift disponíveis em C# estão listados abaixo.
Operador | Nome do Operador |
---|---|
~ | Complemento bit a bit |
& | Bit a bit E |
| | OU bit a bit |
^ | OR exclusivo bit a bit (XOR) |
<< | Deslocamento à esquerda bit a bit |
>> | Deslocamento à direita bit a bit |
Bit a bit OU
O operador OR bit a bit é representado por
|
. Ele executa a operação OR bit a bit nos bits correspondentes de dois operandos. Se um dos bits for 1
, o resultado é 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 (In Binary) 11 = 00001011 (In Binary)
Bit a bit
OR
funcionamento entre 14 e 11:00001110 00001011 -------- 00001111 = 15 (In Decimal)
Exemplo 1:OU 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);
}
}
}
Ao executarmos o programa, a saída será:
14 | 11 = 15
Bit a bit E
O operador AND bit a bit é representado por
&
. Ele executa a operação AND bit a bit nos bits correspondentes de dois operandos. Se um dos bits for 0
, o resultado é 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 (In Binary) 11 = 00001011 (In Binary)
Operação AND bit a bit entre 14 e 11:
00001110 00001011 -------- 00001010 = 10 (In Decimal)
Exemplo 2:bit a bit E
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);
}
}
}
Ao executarmos o programa, a saída será:
14 & 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 mesmos , o resultado é 0
. Se os bits correspondentes forem diferentes , o resultado é 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 (In Binary) 11 = 00001011 (In Binary)
Operação XOR bit a bit entre 14 e 11:
00001110 00001011 -------- 00000101 = 5 (In Decimal)
Se você quiser saber mais 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);
}
}
}
Ao executarmos 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 de 0 para 1. Por exemplo,
26 = 00011010 (In Binary)
Operação de complemento bit a bit em 26:
~ 00011010 = 11100101 = 229 (In 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);
}
}
}
Ao executarmos o programa, a saída será:
~26 = -27
Temos -
27
como saída quando esperávamos 229
. Por que isso aconteceu? Isso acontece porque o valor binário
11100101
que esperamos ser 229
é na verdade uma representação em complemento de 2 de -27
. Números negativos no computador são representados na representação em complemento de 2. Para qualquer inteiro n, 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 de 229
é -27
. Portanto, a saída é -27
em vez de 229
. Deslocamento à esquerda bit a bit
O operador de deslocamento à 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, equivale a
num * 2bits
Por exemplo,
42 = 101010 (In Binary)
Operação de mudança de elevação bit a bit em 42:
42 << 1 = 84 (In binary 1010100) 42 << 2 = 168 (In binary 10101000) 42 << 4 = 672 (In binary 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);
}
}
}
Ao executarmos o programa, a saída será:
42<<1 = 84 42<<2 = 168 42<<4 = 672
Deslocamento à direita bit a bit
O operador de deslocamento à 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, equivale a
floor(num / 2bits)
Por exemplo,
42 = 101010 (In Binary)
Operação de mudança de elevação bit a bit em 42:
42 >> 1 = 21 (In binary 010101) 42 >> 2 = 10 (In binary 001010) 42 >> 4 = 2 (In binary 000010)
Exemplo 6:Deslocamento à 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);
}
}
}
Ao executarmos o programa, a saída será:
42>>1 = 21 42>>2 = 10 42>>4 = 2
Linguagem C
- Palavras-chave e identificadores C#
- Operadores C#
- Operadores C# Bitwise e Bit Shift
- Operadores C++
- Operadores de programação C
- Operadores Python
- Operadores Java
- IoT e blockchain - Uma mudança de paradigma
- Operadores em C++ com Exemplo:O que é, Tipos e Programas
- Operadores bit a bit em C:AND, OR, XOR, Shift &Complement