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
Operacje binarne są kluczowym elementem programowania, szczególnie przy optymalizacjach na niskim poziomie i manipulacjach bitowych. Jednym z takich operatorów jest operator wykluczającego LUB (XOR). W tym artykułe zbadamy operator Binary XOR w C# na podstawie wideo Tima Corey'ego, "The Binary XOR Operator in 10 Minutes or Less."
Wideo Tima to doskonałe wyjaśnienie XOR, jego składni i praktycznych zastosowań. Poniżej przeanalizujemy jego wyjaśnienia i przykłady, odwołując się do konkretnych znaczników czasu dla łatwego odniesienia.
Tim rozpoczyna wideo, wspominając, że jest to część jego serii Understanding Binary in C#, a konkretnie lekcja numer dziewięć. Wprowadza w temat, wyjaśniając, że w tej sesji nauczy, jak działa operator wykluczającego LUB (XOR) i jak może być użyteczny w różnych scenariuszach.
Tim wprowadza dwie wartości, 1 i 2, i wypisuje je na konsolę jako odniesienie. Usuwa 32-bitową reprezentację, aby skupić się na standardowej 8-bitowej reprezentacji binarnej.
W 0:31 wyjaśnia, że XOR jest przedstawiany przez symbol daszka (^) w C#. Przypomina widzom, że:
Tim dalej wyjaśnia zasady dla każdego porównania bitów:
To oznacza, że XOR działa jako detektor różnic między dwiema wartościami.
Tim przechodzi do praktycznego przykladu, definiujac zmienna uint, ktora przechowuje wynik operacji XOR dla dwoch wartosci:
// 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))Następnie wypisuje wynik na konsolę i zauważa wyjściową wartość:
0000 0011
Ten wynik podkreśla, że XOR zachowuje tylko te bity, gdzie jedna z oryginalnych wartości miała 1, ale nie obie.
Teraz Tim demonstruje jedno praktyczne zastosowanie XOR: sprawdzanie, czy dwie wartości są identyczne.
O 3:00 zmienia wartosci tak, aby val1 i val2 byly dokladnie takie same:
// 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))Kiedy wykonuje operację XOR, wynik jest:
0000 0000
Tim wyjaśnia, że wynik XOR równy 0 oznacza, że wartości były identyczne. To sprawia, że XOR jest szybkim sposobem na porównanie dwóch liczb pod kątem równości.
O 4:00, Tim pokazuje inny przypadek, w ktorym val1 i val2 maja niewielkie roznice. Tym razem XOR daje wynik różny od zera, wskazując na różnicę między wartościami.
To podejście jest przydatne przy porównywaniu dużych wartości binarnych efektywnie, ponieważ XOR może wyróżniać różnice w jednym kroku.
Tim przedstawia klasyczny trik programistyczny: zamianę dwóch liczb bez użycia zmiennej tymczasowej.
O 5:40 wyzwala widzow do zamiany val1 i val2 bez deklarowania dodatkowej zmiennej. Rozwiązanie używa XOR trzy razy:
// 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}")Przeprowadza przez proces:
val1 przechowuje val1 ^ val2, co oznacza, ze teraz zawiera mix obu wartosci.val2 jest aktualizowany poprzez ponowne zastosowanie operacji XOR z val1, pozostawiajac tylko oryginalna wartosc val1.val1 jest ponownie poddawany operacji XOR, pozostawiajac tylko oryginalna wartosc val2.O 7:30 Tim drukuje zamienione wartosci i potwierdza, ze val1 i val2 pomyslnie zamienily sie wartosciami.
Aby wzmocnić zrozumienie, Tim uruchamia binarną wersję operacji zamiany, pokazując, jak każdy krok XOR wpływa na bity. Podkreśla, że każdy bit zmienia się tylko wtedy, gdy jest to konieczne, co czyni XOR efektywnym sposobem zamiany wartości.
Tim kończy, wzmacniając kluczowe nauki:
Zachęca widzów do eksperymentowania z XOR i stosowania go do rzeczywistych problemów, aby pogłębić zrozumienie.
Wideo Tima Corey'ego dostarcza doskonałego, zwięzłiego wyjaśnienia XOR w C#. Przechodząc krok po kroku przez przykłady, demonstruje użyteczność operatora w porównaniach, różnicach oraz wymianie wartości.
Jeśli jesteś zainteresowany operacjami binarnymi lub trikami bitowymi, jest to wideo, które warto obejrzeć aby wzmocnić zrozumienie manipulacji binarnej w 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