Zkracene operatory

Předmět zaměřený na praktické programování v jazyku a prostředí Java
peci1
Matfyz(ák|ačka) level II
Příspěvky: 86
Registrován: 21. 1. 2009 20:08
Typ studia: Informatika Bc.

Zkracene operatory

Příspěvek od peci1 »

Ahoj, koukam tak na slajdy ze cviceni a ne a ne vymyslet tohle:

Kód: Vybrat vše

package cz.cuni.mff.java.example01;
public class Swap {
  public static void main(String[] argv) {
    int x = 10;
    int y = 20;
    x ^= y ^= x ^= y;
    System.out.println(x);
    System.out.println(y);
  } 
}
Co jsem se docetl, tak ^ je xor. Chapu tenhle zapis dobre, ze je exvivalentni s

Kód: Vybrat vše

x ^= (y ^= (x ^= y));
a tedy 
x = x ^ (y = y ^ (x = x ^ y));
? Kdyz to spustim v Jave, tak se to tvari, ze to je ekvivalentni a vsechny zapisy daji vysledek 0:10.

Ale nedokazu si to spocitat z hlavy :(
Zapiseme cisla binarne:
10 = 01010 = x
20 = 10100 = y
30 = 11110

a ted vyhodnocuju (predpokladam spravne, ze hodnota prirazeni se rovna hodnote vyrazu, ktery se priradil, ne?)

Kód: Vybrat vše

x = x ^ y = 01010 ^ 10100 = 11110
y = y ^ (x = x ^ y) = y ^ 11110 = 10100 ^ 11110 = 01010
x = x ^ (y = y ^ (x = x ^ y)) = x ^ 01010 = 11110 ^ 01010 = 10100
Tedy mi vychazi x=20 a y=10, misto x=0 a y=10.

Najde mi tam pls nekdo chybu? Vazne uz nevim, jak jinak do toho... Diky moc
Uživatelský avatar
Tacoud
Donátor
Donátor
Příspěvky: 53
Registrován: 16. 9. 2005 08:38
Typ studia: Informatika Bc.
Bydliště: Mladá Boleslav
Kontaktovat uživatele:

Re: Zkracene operatory

Příspěvek od Tacoud »

Při vyhodnocování složených přiřazovacích operátorů se postupuje zjednodušeně takto:

1. Hodnota levého operandu se uloží
2. Vyhodnotí se výraz vpravo
3. Na uloženou hodnotu a vyhodnocený výraz se použije daná operace

V našem případě to konkrétně bude vypadat takhle:

Kód: Vybrat vše

int x = 10;
int y = 20;

x ^= y ^= x ^= y;
x ^= (y ^= (x ^= y));
x = 10 ^ (y ^= x ^= y)
x = 10 ^ (y = 20 ^ (x ^= y))
x = 10 ^ (y = 20 ^ (x = 10 ^ y))
Více informací lze najít ve specifikaci : http://java.sun.com/docs/books/jls/thir ... ml#15.26.2
peci1
Matfyz(ák|ačka) level II
Příspěvky: 86
Registrován: 21. 1. 2009 20:08
Typ studia: Informatika Bc.

Re: Zkracene operatory

Příspěvek od peci1 »

Diky moc za vysvetleni ;) Ale na rovinu - kdo by takovou hovadinu psal do kodu, ze =) Citelnost tohohle vyrazu je nulova... Je to jenom Hnetynkuv vejmysl, jak zaridit, aby ta zkouska nebyla lehka =)
Odpovědět

Zpět na „PGR013 Java“