• 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 :)

Fiszki IT
Fiszki IT
+1 głos
5,080 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 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,930 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,310 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 64 wizyt
pytanie zadane 16 kwietnia w SPOJ przez manjaro Nałogowiec (34,560 p.)
+1 głos
2 odpowiedzi 119 wizyt
0 głosów
1 odpowiedź 154 wizyt
pytanie zadane 20 czerwca 2018 w C i C++ przez Hiskiel Pasjonat (22,850 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

84,736 zapytań

133,542 odpowiedzi

295,952 komentarzy

56,001 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...