Przejdź do treści stopki
Iron Academy Logo
Naucz się C#
Naucz się C#

Inne Kategorie

Zrozumienie operatora XOR binarnego w C#

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.

Wprowadzenie do XOR

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.

Składnia operatora XOR i podstawowe wyjaśnienia

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:

  • Operator AND (&) wymaga, aby oba bity były 1, aby zwrócić 1.
  • Operator OR (|) zwraca 1, jeśli przynajmniej jeden z bitów to 1.
  • Operator XOR (^) zwraca 1 tylko wtedy, gdy jeden z dwóch bitów to 1, ale nie oba.

Tim dalej wyjaśnia zasady dla każdego porównania bitów:

  • 1 XOR 0 = 1
  • 0 XOR 1 = 1
  • 1 XOR 1 = 0
  • 0 XOR 0 = 0

To oznacza, że XOR działa jako detektor różnic między dwiema wartościami.

Demonstracja XOR w kodzie C

Tim przechodzi do praktycznego przykładu, definiując zmienną uint, która przechowuje wynik operacji XOR na dwóch wartościach:

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

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.

Używanie XOR do porównywania wartości

Teraz Tim demonstruje jedno praktyczne zastosowanie XOR: sprawdzanie, czy dwie wartości są identyczne.

W 3:00 modyfikuje wartości tak, aby val1 i val2 były dokładnie 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
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'));

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.

XOR do identyfikowania różnic

W 4:00 Tim pokazuje inny przypadek, w którym val1 i val2 mają drobne różnice. 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.

XOR do zamiany dwóch zmiennych bez zmiennej tymczasowej

Tim przedstawia klasyczny trik programistyczny: zamianę dwóch liczb bez użycia zmiennej tymczasowej.

W 5:40 rzuca wyzwanie widzom, aby zamienili 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
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}");

Przeprowadza przez proces:

  1. val1 przechowuje val1 ^ val2, co oznacza, że teraz zawiera mieszankę obu wartości.
  2. val2 jest aktualizowana przez ponowne zastosowanie XOR z val1, co pozostawia tylko oryginalną wartość val1.
  3. val1 jest ponownie XOR-owana, co pozostawia tylko oryginalną wartość val2.

W 7:30 Tim wypisuje zamienione wartości i potwierdza, że val1 i val2 skutecznie zamieniły się wartościami.

Zrozumienie XOR w reprezentacji binarnej

Aby wzmocnić zrozumieniuiuiuiuie, 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.

Wnioski

Tim kończy, wzmacniając kluczowe nauki:

  • XOR zwraca 1 tylko wtedy, gdy dokładnie jeden z bitów to 1.
  • Może być używany do porównywania wartości efektywnie.
  • Pomaga zamieniać dwie wartości bez trzeciej zmiennej, czyniąc go przydatnym trikiem w wyzwaniach programistycznych.

Zachęca widzów do eksperymentowania z XOR i stosowania go do rzeczywistych problemów, aby pogłębić zrozumieniuiuiuiuie.

Podsumowanie

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ć zrozumieniuiuiuiuie manipulacji binarnej w C#.

Hero Worlddot related to Zrozumienie operatora XOR binarnego w C#
Hero Affiliate related to Zrozumienie operatora XOR binarnego w C#

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie