Operatory arytmetyczne

Operatory dostępne w języku Java możemy podzielić na cztery grupy. Są to operatory arytmetyczne, logiczne, relacyjne oraz operatory przypisania.

Operatory arytmetyczne to: operator sumy liczb i konkatenacji stringów +, operator różnicy liczb -, operator iloczynu liczb *, operator ilorazu liczb /, operator reszty z dzielenia (modulo) % oraz operatory inkrementacji i dekrementacji, tj. ++ oraz ‑‑. Operatory +, -, *, / oraz % dla operandów liczbowych to odpowiedniki dobrze znanych operacji matematycznych. Operatory ++ i — to operatory jednoargumentowe. Operator ++ służy do zwiększania o jeden wartości swego operandu a operator — do analogicznego zmniejszania wartości. Składnia wyrażenia arytmetycznego dla operatorów dwuargumentowych jest następująca:

 

{operand pierwszy} {operator dwuargumentowy} {operand drugi}


a dla operatorów jednoargumentowych:

{operator jednoargumentowy}{operand}

albo:

{operand}{operator jednoargumentowy}

Jak widać operatorów inkrementacji i dekrementacji możemy używać w wersji prefixowej i postfixowej. Mówimy wtedy odpowiednio o preinkrementacji i postinkrementacji oraz predekrementacji i postdekrementacji.

Różnica między operatorami inkrementacji i dekrementacji w wersji prefixowej i postfixowej jest taka, że wartością wyrażenia dla wersji postfixowej jest wartość z przed wykonania operacji a dla wersji prefixowej wartość po wykonaniu operacji. Przykładowo, jeśli początkowo zmienna x miała wartość 5 to wyrażenie ++x ma wartość 6 a wyrażenia x++ ma wartość 5, mimo że w wyniku obydwu tych operacji wartość zmiennej x została zwiększona o 1. Mówiąc jeszcze inaczej, uruchomienie instrukcji:

int x = 5;
  
System.out.println(++x);
System.out.println(x);


spowoduje wyświetlenie dwukrotnie liczby 6, natomiast efektem uruchomiania kodu:

int x = 5;

System.out.println(x++);
System.out.println(x);

będzie wyświetlenie liczby 5 a potem liczby 6. Instrukcja System.out.println(++x) powoduje, że w pierwszej kolejności zwiększana jest wartość zmiennej x a dopiero potem wartość ta jest odczytywana i wyświetlana, natomiast instrukcja System.out.println(x++) ma tę semantykę, że wpierw pobierana jest i wyświetlana wartość zmiennej x, a dopiero potem wartość ta jest inkrementowana.

Operator + oprócz tego że jest operatorem sumy liczb jest też operatorem konkatenacji stringów. Operator + jest operatorem konkatenacji, jeśli choć jeden z operandów tego operatora jest stringiem. Operator konkatenacji ma ten sam priorytet co operator sumy, co daje czasem niespodziewane efekty. Przykładowo wykonanie instrukcji:

System.out.println("2 plus 2 to " + 2 + 2);

spowoduje wyświetlenie napisu 2 plus 2 to 22.

Pierwszeństwo jeśli chodzi o kolejność wykonywania działań mają zawsze operatory unarne, a więc ++ i –. Następnie wykonywane są operacje *, / oraz % a operatory + i – wiążą najsłabiej. Poza tym, jeśli kolejność wykonywania działań nie jest w pełni wyznaczona przez pierwszeństwo operatorów to są one wykonywane od lewej do prawej.

W wyrażeniu „2 plus 2 to ” + 2 + 2 z powyższego przykładu jako pierwsza wykona się więc operacja konkatenacji „2 plus 2 to ” + 2 której wynikiem jest string 2 plus 2 to 2. Następnie wykonana będzie konkatenacja „2 plus 2 to 2” + 2 a więc w rezultacie otrzymamy string 2 plus 2 to 22. Kolejność wykonywania działań możemy oczywiście zmienić, stosując nawiasy. W powyższym przykładzie – aby otrzymać spodziewany wynik – wystarczyłoby ująć w nawiasy podwyrażenie 2 + 2.

Subscribe
Powiadom o
guest
2 komentarzy
Oldest
Newest Most Voted
Inline Feedbacks
View all comments