|
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.
|