Zkracene operatory

Odeslat odpověď

Smajlíci
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode je zapnutý
[img] je zapnutý
[flash] je vypnutý
[url] je zapnuté
Smajlíci jsou zapnutí

Přehled tématu
   

Rozšířit náhled Přehled tématu: Zkracene operatory

Re: Zkracene operatory

od peci1 » 13. 2. 2010 12:11

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 =)

Re: Zkracene operatory

od Tacoud » 13. 2. 2010 10:21

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

Zkracene operatory

od peci1 » 12. 2. 2010 19:43

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

Nahoru