Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
5m 54s
As operações binárias são uma parte crucial da programação, particularmente quando se trata de otimizações de baixo nível e manipulações bit a bit. Uma dessas operações é o operador OU exclusivo (XOR). Neste artigo, exploraremos o operador XOR binário do C# acompanhando o vídeo de Tim Corey, " O operador XOR binário em 10 minutos ou menos".
O vídeo do Tim é uma excelente análise do XOR, sua sintaxe e suas aplicações práticas. A seguir, analisaremos suas explicações e exemplos, fazendo referência a momentos específicos para facilitar a consulta.
Tim inicia o vídeo mencionando que esta é parte de sua série "Entendendo Binário em C#", especificamente a lição número nove. Ele prepara o terreno explicando que, nesta sessão, ensinará como funciona o operador OU exclusivo (XOR) e como ele pode ser útil em diversos cenários.
Tim introduz dois valores, 1 e 2, e os imprime no console para referência. Ele remove a representação de 32 bits para manter o foco na representação binária padrão de 8 bits.
Aos 0:31, ele explica que o XOR é representado pelo símbolo de acento circunflexo (^) em C#. Ele lembra aos telespectadores que:
Tim explica ainda a regra para cada comparação de bits:
Isso significa que o XOR atua como um detector de diferença entre dois valores.
Tim passa para um exemplo prático definindo uma variável uint que mantém o resultado do XOR de dois valores:
// Define two sample values
uint val1 = 0b0001; // 1 in decimal
uint val2 = 0b0010; // 2 in decimal
// Perform XOR operation between val1 and val2
uint result = val1 ^ val2;
// Print the resultant binary value of XOR operation
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));' Define two sample values
Dim val1 As UInteger = &B0001 ' 1 in decimal
Dim val2 As UInteger = &B0010 ' 2 in decimal
' Perform XOR operation between val1 and val2
Dim result As UInteger = val1 Xor val2
' Print the resultant binary value of XOR operation
Console.WriteLine(Convert.ToString(result, toBase:=2).PadLeft(8, "0"c))Em seguida, ele imprime o resultado no console e anota a saída:
0000 0011
Este resultado destaca que a operação XOR preserva apenas os bits em que um dos valores originais era 1, mas não ambos.
Tim agora demonstra um uso prático do XOR: verificar se dois valores são idênticos.
Às 3:00, ele modifica os valores para que val1 e val2 sejam exatamente os mesmos:
// Initialize val1 and val2 to the same value
uint val1 = 0b10011001;
uint val2 = 0b10011001;
// Perform XOR operation to check for identical values
uint result = val1 ^ val2;
// Output will be zero if both values are identical
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));' Initialize val1 and val2 to the same value
Dim val1 As UInteger = &B10011001UI
Dim val2 As UInteger = &B10011001UI
' Perform XOR operation to check for identical values
Dim result As UInteger = val1 Xor val2
' Output will be zero if both values are identical
Console.WriteLine(Convert.ToString(result, 2).PadLeft(8, "0"c))Ao executar a operação XOR, o resultado é:
0000 0000
Tim explica que um resultado XOR de 0 significa que os valores eram idênticos. Isso faz do XOR uma maneira rápida de comparar dois números para verificar se são iguais.
Às 4:00, Tim mostra outro caso onde val1 e val2 têm pequenas diferenças. Desta vez, o XOR produz um resultado diferente de zero, indicando uma diferença entre os valores.
Essa abordagem é útil para comparar grandes valores binários de forma eficiente, pois o XOR pode destacar as diferenças em apenas uma etapa.
Tim apresenta um truque clássico de programação: trocar dois números sem usar uma variável temporária.
Às 5:40, ele desafia os espectadores a trocar val1 e val2 sem declarar uma variável extra. A solução utiliza XOR três vezes:
// Original values
uint val1 = 0b0010; // 2 in decimal
uint val2 = 0b0100; // 4 in decimal
// Swap the values using XOR
val1 = val1 ^ val2;
val2 = val1 ^ val2;
val1 = val1 ^ val2;
// After swap: val1 = 4, val2 = 2
Console.WriteLine($"val1: {val1}, val2: {val2}");' Original values
Dim val1 As UInteger = &B0010 ' 2 in decimal
Dim val2 As UInteger = &B0100 ' 4 in decimal
' Swap the values using XOR
val1 = val1 Xor val2
val2 = val1 Xor val2
val1 = val1 Xor val2
' After swap: val1 = 4, val2 = 2
Console.WriteLine($"val1: {val1}, val2: {val2}")Ele descreve o processo passo a passo:
val1 armazena val1 ^ val2, o que significa que agora mantém uma mistura de ambos os valores.val2 é atualizado fazendo XOR com val1 novamente, deixando apenas o valor original val1.val1 é novamente combinado com XOR, deixando apenas o valor original val2.Às 7:30, Tim imprime os valores trocados e confirma que val1 e val2 trocaram seus valores com sucesso.
Para consolidar o entendimento, Tim executa uma versão binária da operação de troca, mostrando como cada etapa XOR afeta os bits. Ele destaca que cada bit é invertido apenas quando necessário, tornando o XOR uma maneira eficiente de trocar valores.
Tim conclui reforçando os principais pontos abordados:
Ele incentiva os espectadores a experimentarem o XOR e a aplicá-lo a problemas do mundo real para desenvolver uma compreensão mais profunda.
O vídeo de Tim Corey oferece uma excelente e concisa explicação sobre o XOR em C#. Ao apresentar exemplos passo a passo, ele demonstra a utilidade do operador em comparações, diferenças e até mesmo na troca de valores.
Se você se interessa por operações binárias ou truques bit a bit, este vídeo é essencial para aprimorar seu conhecimento em manipulação binária em C#.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy