niedziela,
Operator XOR
Operator XOR, znany również jako „exclusive or” (wykluczające LUB), jest operatorem logicznym stosowanym w matematyce i informatyce. Działa on na zasadzie porównywania dwóch wartości binarnych (0 lub 1) w taki sposób, że wynik jest równy 1 tylko wtedy, gdy porównywane wartości są różne. Jeśli obie wartości są takie same (oba 0 lub oba 1), wynik operacji XOR wynosi 0. Inne określenie XOR to alternatywa rozłączna, alternatywa wyłączająca, ekskluzja, alternatywa wykluczająca, różnica symetryczna, suma poprzeczna, suma modulo 2, kontrawalencja.
Jak działa XOR?
- 0 XOR 0 = 0 (ponieważ obie wartości są takie same)
- 0 XOR 1 = 1 (ponieważ wartości są różne)
- 1 XOR 0 = 1 (ponieważ wartości są różne)
- 1 XOR 1 = 0 (ponieważ obie wartości są takie same)
Przykłady
Prosty przykład
11001101
XOR 11111111
-----------
00110010
Wynik operacji 11001101 XOR 11111111
to 00110010
.
Czy operacja XOR jest przemienna?
Żeby to sprawdzić, zamieniono kolejność argumentów z poprzedniego przykładu.
11111111
XOR 11001101
-----------
00110010
Wynik operacji 11111111 XOR 11001101
to 00110010
, zatem odpowiedź brzmi „TAK”.
Kolejny przykład
11011101
XOR 11110000
-----------
00101101
Wynik operacji 11011101 XOR 11110000
to 00101101
.
Zastosowania operatora XOR
Operator XOR jest uniwersalnym narzędziem, znajdującym zastosowanie w wielu dziedzinach informatyki i elektroniki.
- Kodowanie i szyfrowanie danych – XOR jest często używany w prostych algorytmach szyfrowania, ponieważ operacja jest łatwa do odwrócenia. Na przykład, jeśli zaszyfrujesz dane za pomocą określonego klucza przy użyciu XOR, możesz odszyfrować dane, ponownie stosując XOR z tym samym kluczem.
- Detekcja zmian – może być używany do wykrywania zmian w danych. Przez porównanie dwóch zestawów danych za pomocą XOR, można łatwo zidentyfikować, gdzie wystąpiły zmiany.
- Operacje bitowe – w programowaniu, XOR jest często stosowany w operacjach bitowych do manipulowania wartościami binarnymi na poziomie indywidualnych bitów.
- Parzystość – XOR jest używany do obliczania bitów parzystości w niektórych formach kontroli błędów transmisji danych.
- Logika cyfrowa i projektowanie układów – w elektronice cyfrowej, bramki XOR są podstawowym składnikiem w projektowaniu układów logicznych i mikroprocesorów.
- Gry i algorytmy – XOR znajduje zastosowanie w niektórych grach logicznych i algorytmach, gdzie decydująca jest manipulacja wartościami binarnymi.
Operator XOR w programowaniu
W językach programowania, takich jak C/C++/C#/Java/JavaScript i wielu innych, alternatywę rozłączną oznaczamy za pomocą symbolu ^. Poniżej znajdziesz kilka przykładowych kodów programów w różnych językach, które ilustrują różne zastosowania operatora XOR w różnych językach programowania.
Python: Proste operacje
# Prosta operacja XOR
a = 0b1010 # Binarnie dla 10
b = 0b1100 # Binarnie dla 12
result = a ^ b # Wynik to 0b0110, co odpowiada 6
print("a XOR b =", result)
# Sprawdzenie parzystości
number = 15
parity = 0
while number:
parity ^= number & 1
number >>= 1
print("Parzystość:", parity) # Wynik: 0 dla parzystych, 1 dla nieparzystych
Język C++: Szyfrowanie i deszyfrowanie
#include <iostream>
#include <string>
std::string xorCipher(std::string text, char key) {
std::string output = text;
for (size_t i = 0; i < text.size(); i++) {
output[i] = text[i] ^ key;
}
return output;
}
int main() {
std::string original = "Hello World!";
char key = 'X';
std::string encrypted = xorCipher(original, key);
std::string decrypted = xorCipher(encrypted, key);
std::cout << "Oryginał: " << original << std::endl;
std::cout << "Zaszyfrowane: " << encrypted << std::endl;
std::cout << "Rozszyfrowane: " << decrypted << std::endl;
return 0;
}
Java: Operacje Bitowe
public class BitwiseXOR {
public static void main(String[] args) {
int a = 5; // Binarnie 0101
int b = 3; // Binarnie 0011
// Operacja XOR
int result = a ^ b; // Wynik to 0101 ^ 0011 = 0110, co odpowiada 6
System.out.println("a XOR b = " + result);
}
}
PHP
<?php
$a = 12; // Binarnie: 1100
$b = 5; // Binarnie: 0101
// Operacja XOR
$result = $a ^ $b; // Binarnie: 1001, co odpowiada 9
echo $result; // Wyświetli 9
?>
JavaScript
let a = 12; // Binarnie: 1100
let b = 5; // Binarnie: 0101
// Operacja XOR
let result = a ^ b; // Binarnie: 1001, co odpowiada 9
console.log(result); // Wyświetli 9
Ruby
a = 12 # Binarnie: 1100
b = 5 # Binarnie: 0101
# Operacja XOR
result = a ^ b # Binarnie: 1001, co odpowiada 9
puts result # Wyświetli 9
Powłoka bash
#!/bin/bash
# Definiowanie dwóch liczb
a=12 # Binarnie: 1100
b=5 # Binarnie: 0101
# Operacja XOR
result=$((a ^ b))
echo "Wynik operacji XOR: $result" # Wynik to 9 (binarnie: 1001)
W tym przykładzie wystąpiły dwie zmienne a
i b
, na których wykonano operację XOR, używając operatora ^
wewnątrz $(( ))
, który w bash służy do wykonywania obliczeń. Następnie za pomocą polecenia echo
jest wyświetlany wynik. Pamiętaj, że skrypty bash muszą być uruchamiane w środowisku, które wspiera powłokę bash, takim jak Linux lub macOS, lub w systemie Windows z zainstalowanym narzędziem, takim jak Git Bash lub WSL (Windows Subsystem for Linux).
Zadania
Trening czyni mistrza, warto rozwiązać kilka prostych zadań. Twoim zadaniem jest obliczenie wyniku operacji XOR na danych liczbach binarnych. Pamiętaj, że XOR zwraca 1 tylko wtedy, gdy bity są różne – w przeciwnym razie wynikiem jest 0.
Zadanie 1
1010
XOR 1100
------------
Zadanie 2
0011
XOR 1011
------------
Zadanie 3
1111
XOR 0000
------------
Zadanie 4
0101
XOR 1010
------------
Zadanie 5
1001
XOR 1001
------------