Część 3.2. Operatory
Za pomocą operatorów arytmetycznych możemy wykonywać działania na zmiennych wszystkich typów podstawowych
z wyjątkiem typu boolean. Jeżeli chociaż jeden z argumentów działania jest typu rzeczywistego
(double lub float), to wynik również jest typu rzeczywistego.
W przeciwnym wypadku wynik jest zawsze typu całkowitego. Jest to istotne szczególnie w przypadku dzielenia,
gdyż dzielenie liczb całkowitych w wyniku zwróci zawsze liczbę całkowitą (obciętą, a nie zaokrągloną).
Poniższa tabela przedstawia wszystkie dostępne w Javie operatory arytmetyczne:
Żeby sprawdzić jak te operatory działają w praktyce i zobaczyć ich wynik napisz poniższy program, a następnie go skompiluj i uruchom: public class Przyklad { public static void main (String args[]) { int x = 2; int y = 5; System.out.println ("x * y = " + (x * y)); System.out.println ("x / y = " + (x / y)); System.out.println ("x % y = " + (x % y)); System.out.println ("x + y = " + (x + y)); System.out.println ("x - y = " + (x - y)); System.out.println ("++x = " + (++x)); System.out.println ("x++ = " + (x++)); System.out.println ("x = " + (x)); } } Uruchomiony program powinien wyświetlić taki wynik: ![]() Zwróć uwagę na trzy ostatnie wiersze: pokazują one wyraźnie różnicę działania miedzy przedrostkową i przyrostkową inkrementacją zmiennej. Analogicznie działa dekrementacja (--). Możesz to łatwo sprawdzić, zmieniając operator ++ na --. W powyższym programie zmień typ jednej ze zmiennych x lub y na doble i ponownie go skompiluj i uruchom. Tym razem efekt działania programu powinien wyglądać tak: ![]() Poza różą formą zapisu wyniku jedyna rzeczywista różnica występuje - zgodnie z tym co powiedzieliśmy wcześniej - w wyniku dzielenia. W przypadku, gdy wynik działania przekracza maksymalna dopuszczalną dla danego typu wartość, to w Javie - w odróżnieniu od innych języków programowania - nie następuje przepełnienie, ale wynik modulo (reszta z dzielenia) otrzymanego wyniku przez maksymalną wartość. Możesz to sprawdzić na poniższym przykładzie: public class Przyklad { public static void main (String args[]) { int x = (int)Math.pow(2, 32) + 1; // Math.pow(2, 32) służy do obliczenia 2 do potęgi 32 int y = x + x; System.out.println ("x = " + x); System.out.println ("y = " + y); } } Wynik tego programu powinien być następujący: ![]() W poniższej tabeli przedstawione są wszystkie dostępne w Javie operatory bitowe:
Podobnie jak przy operatorach arytmetycznych sprawdźmy jak działają w praktyce na przykładzie poniższyego programu: public class Przyklad { public static void main (String args[]) { int x = 25; // bitowo: 011001 int y = 15; // bitowo: 001111 System.out.println ("~x = " + (~x)); System.out.println ("x & y = " + (x & y)); System.out.println ("x | y = " + (x | y)); System.out.println ("x ^ y = " + (x ^ y)); System.out.println ("4 << 2 = " + (4 << 2)); System.out.println ("32 >> 2 = " + (32 >> 2)); System.out.println ("32 >>> 2 = " + (32 >>> 2)); } } Uruchomiony program powinien wyświetlić taki wynik: ![]() Sprawdźmy te wyniki wykonując samodzielnie operacje bitowe na liczbach użytych w powyższym programie:
Podobnie, jak w poprzednich przypadkach, sprawdźmy również teraz jak te operatory działają w praktyce. W tym celu stworzymy kolejny program testujący operatory logiczne: public class Przyklad { public static void main (String args[]) { System.out.println (" 2 > 5 = " + (2 > 5)); System.out.println ("NIE 2 > 5 = " + ( !(2 > 5))); System.out.println (" 2 > 5 LUB 5 > 2 = " + (2 > 5 || 5 > 2)); System.out.println (" 2 > 5 I 5 > 2 = " + (2 > 5 && 5 > 2)); } } Uruchomiony program powinien wyświetlić taki wynik: ![]()
O ile proste przypisanie nie wymaga chyba żadnych komentarzy, to przypisanie złożone prześledzimy tradycyjnie na przykładowym programie: public class Przyklad { public static void main (String args[]) { int x = 1; System.out.println ("x = " + x); x += 5; System.out.println ("x = " + x); x -= 5; System.out.println ("x = " + x); x *= 5; System.out.println ("x = " + x); x >>= 2; System.out.println ("x = " + x); x <<= 5; System.out.println ("x = " + x); x |= 5; System.out.println ("x = " + x); x &= 15; System.out.println ("x = " + x); } } Po skompilowaniu i uruchomieniu tego programu powinieneś otrzymać takie wyniki: ![]() I jeszcze jeden przykład ilustrujący użycie operatora przypisania warunkowego: public class Przyklad { public static void main (String args[]) { int x = 1; System.out.println ("znak liczby: " + ((x>0) ? "plus" : "minus")); } } Ponieważ x jest większe od zera, to powyższy program powinien wyświetlić napis: znak liczby: plus Operatory porównania służą do sprawdzenia relacji między zmiennymi lub wyrażeniami. Zawsze zwracają wartość logiczną true lub false informującą czy porównanie jest prawdą, czy fałszem.
|