• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

XOR C++ Prośba o wytłumaczenie :)

VPS Starter Arubacloud
+1 głos
7,473 wizyt
pytanie zadane 12 maja 2015 w C i C++ przez Kabiszon Użytkownik (890 p.)
Witam !

Robiąc jedno z zadań na spoju natknąłem się na porblem związany ze Xorem :) Stąd moja prośba czy moglibyście wytłumaczyć mi czy tam właściwie jest Xor jak się go wykorzystuje itp. Tylko proszę was nie wklejajcie linków do innych stron bo sam już je obczaiłem i nawet one nie pomogły mi zrozumieć czym tak naprawdę jest XOR :)

Mam jeszcze jedną prośbę na jakiej zasadzie działa te zamienianie 2 licz:

x^=y;

y^=x;

x^=y;

Z góry dziękuję za odpowiedź :)

3 odpowiedzi

+2 głosów
odpowiedź 12 maja 2015 przez Kelmac Gaduła (3,970 p.)
wybrane 12 maja 2015 przez Kabiszon
 
Najlepsza
Albo patrząc z techniki cyfrowej, jeśli dane bity są różne to jeden jeżli są takie same to 0;

tzw tablica prawdy

X | Y | X^Y
----------------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0

jeżli chcesz pojąc zamiane ty liczb, najlepiej rozpisać je sobie bitowo

np X = 4 =>0100b  Y=6 => 0110b

tak więc pierwsza operacja x^=y czyli x=x^y

x = 1000
y=  0110
------------------
x^y = 1110  // rozpatrujesz w pionie każdy bit, jak różne to 1 jak te same to 0

wynik zapisany do x tak wiec teraz
 x= 1110
y=  0110
------------------
y^x 1000 // i wynimzapisujemy do y

teraz
x  = 1110
y =  1000
--------------------

x^y 0110 wynik zapisujemy do x

tak więc mamy

x = 0110 => 6
y= 0100 =>  4

Przeanalizuj :)
komentarz 12 maja 2015 przez Piotr Królak Obywatel (1,950 p.)
Może bardziej przystępne będzie takie wytłumaczenie:
XOR znaczy tyle samo co NIE OR, przy czym OR to suma logiczna algebry boola.
O wyżej wspoknianej sumie należy wiedzieć tyle że daje wartość 0(fałsz) TYLKO kiedy wartości wektora wejściowego(wszystkie) są równe 0.

W innym wypadku będzie to 1.

Więc skoro XOR to NIE OR to oznacza tyle że wartość XOR jest równa 1 TYLKO kiedy wszystkie wartości wektora wejściowego są równe 0. Czy to będzie jak w tab. prawdy Kelmaca czy też jeżeli wartości wej będze 100.
komentarz 12 maja 2015 przez Kabiszon Użytkownik (890 p.)
Dzięki WIELKIE :) Właśnie z tym miałem największy problem, Dzięki :)
komentarz 28 czerwca 2021 przez Szczupły Nowicjusz (100 p.)

@Piotr Królak, pomyliłeś XOR z NOR. 

+1 głos
odpowiedź 12 maja 2015 przez hit02 Nałogowiec (33,970 p.)
edycja 13 maja 2015 przez hit02

Jest to operacja bitowa, czyli działa na bitach, a nie na całej liczbie. Samo działanie polega na tym, że zwraca 1 tylko wtedy, gdy oba bity na wejściu są różne.

Co do zamiany liczb, to najlepiej rozpisz sobie wszystko na kartce. Działa to też dla jednej zmiennej i jakiejś stałej.

X ^= 123;
X ^= 123;

Po tych operacjach X się nie zmieni i z tego można wyprowadzić zamianę liczb. Możesz to sobie udowodnić na kartce. smiley Można tego użyć jako prymitywnego szyfrowania które sprawia, że w prost nie można nic przeczytać, ale szyfrowanie, odszyfrowywanie i łamanie szyfrogramu jest bardzo łatwe.

@edit Stwierdziłem, że lepiej wstawić tutaj dowodzik, aby nie było wątpliwości.

0 głosów
odpowiedź 12 maja 2015 przez Dorion300 Szeryf (90,250 p.)
edycja 12 maja 2015 przez Dorion300

XOR zwraca prawdę jeśli oba zmienne są przeciwne do siebie. np. False i true.

Jeśli Prawda i prawda to zwraca False
 

y^=x;

Oznacza to: Jeśli Y i X są przeciwne to do Y zmieniasz wartość True jeśli nie: False.

 

#include <iostream>

using namespace std;

int main()
{
    bool x = true;
    bool y = true;
    x^=y;
    cout << x << endl; // wypisze 0 czyli False
    x = false;
    x^=y;
    cout << x << endl; // wypisze 1 czyli True

    return 0;
}

komentarz 12 maja 2015 przez Piotr Królak Obywatel (1,950 p.)
Prostymi słowami. W elektronice fukcja(bramka) XOR to zaprzeczenie logiczne sumy w algebrze boola.

Jeżeli interesuje Cię albgebra boola to zgoogluj :)
Co do samej sumy to funkcja OR(suma logiczna) zwraca 0(fałsz) TYLKO kiedy wszystkie składniki wektora wejściowego są równe 0(fałsz), jeżeli chociaż jeden z nich jest równy jeden to wynik OR=1.

Ale XOR czytasz jako NIE OR(zaprzeczenie) więc jeżeli suma logiczna daje wynik 1 to XOR zaienia ją na 0, stąd konkluzja dorion300'a.

Generalni jeżeli OR zwraca 0 TYLKO kiedy wszystkie parametry syg wejściowego są równe 0 to znaczy że XOR w takim wypadku zwraca wartość 1 czyli prawda.

To raczej wszystk co przychodzi mi do głowy na temat XOR.

Podobne pytania

+2 głosów
2 odpowiedzi 341 wizyt
pytanie zadane 16 kwietnia 2021 w SPOJ przez manjaro Nałogowiec (37,390 p.)
0 głosów
2 odpowiedzi 486 wizyt
pytanie zadane 2 października 2021 w C i C++ przez Michał F Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 309 wizyt
pytanie zadane 31 grudnia 2022 w C i C++ przez Noizz00 Użytkownik (910 p.)

92,775 zapytań

141,703 odpowiedzi

320,567 komentarzy

62,109 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...