Operator – w programowaniu konstrukcja językowa jedno-, bądź wieloargumentowa zwracająca wartość.
Spis treści |
Do podstawowych operatorów, będących elementem większości języków programowania, należą operatory arytmetyczne: dodawania (+), odejmowania (-), mnożenia (*), dzielenia (/); operatory porównania: większe niż (>), mniejsze niż (<), większe równe (>=), mniejsze równe (<=), równe (= lub ==), różne (<> lub !=), a także operatory operacji logicznych, operacji bitowych, przypisań itd. Główne cechy opisujące operator to liczba i typy argumentów, typ wartości zwracanej, wykonywane działanie, priorytet oraz łączność lub jej brak. Dany język posiada swoją listę operatorów wraz z określonymi cechami, mówiącymi o kolejności wykonywania operacji w przypadku, gdy nie zastosowano nawiasów. W niektórych językach można definiować nowe operatory oraz zmieniać priorytety i łączność.
(do uzupełnienia o pozostałe języki)
| operator | liczba argumentów | działanie i zwracana wartość | występowanie i priorytet (1 – najwyższy) | ||||||
| C | C++ | Java | JavaScript | Perl | Python | PHP | |||
zakres::x |
2 | określenie zakresu lub przestrzeni nazw danej zmiennej/odwołanie do zmiennej globalnej – zwraca wartość zmiennej | - | 1 | - | 1 | |||
Str.polewskStr->pole |
2 | wybór pola ze struktury lub klasy – zwraca wartość wybranego pola | 1 | 2 | 1 | 2 | |||
tablica[n][1] |
2 | wybór wartości z pola tablicy o określonym indeksie – zwraca wartość wybranego pola | 1 | 2 | 1 | 2 | |||
funkcja() |
zm. | wywołanie funkcji – operator o zmiennej liczbie argumentów, zwraca wartość funkcji | 1 | 2 | 1 | 2 | |||
sizeof(obiekt) |
1 | zwraca rozmiar obiektu (zmiennej, typu) w bajtach | 1 | 2 | - | - | |||
new typ |
1 | alokuje blok pamięci na dynamiczną zmienną danego typu/zwalnia zaalokowaną pamięć wskazywaną przez wskaźnik x | - | 2 | 2 | 1 | |||
*wsk |
1 | operator wyłuskania wartości zmiennej ze wskaźnika – zwraca wartość zmiennej | 2 | 3 | - | 3 | |||
&x |
1 | operator adresu – zwraca fizyczny adres komórki pamięci przechowującej zmienną x; operator referencji | 2 | 3 | - | 3 | |||
(typ)zmienna |
2 | operator rzutowania – zwraca wartość zmiennej po zrzutowaniu na dany typ | 2 | 3 | 2 | 3 | |||
x++ |
1 | inkrementacja/dekrementacja postfiksowa – zwraca wartość zmiennej x, następnie zwiększa/zmniejsza ją o 1 | 2 | 3 | 2 | 3 | |||
++x |
1 | inkrementacja/dekrementacja prefiksowa – zwiększa/zmniejsza wartość zmiennej o 1 oraz zwraca jej nową wartość | 2 | 3 | 2 | 3 | |||
+x |
1 | unarne operatory znaku liczby – zwracają wartość zmiennej po "dopisaniu" znaku, nie ingerując w wartość | 2[2] | 3 | 2 | 3 | |||
~x |
1 | negacja bitowa – zwraca zmienną z zanegowanymi wszystkimi bitami, nie ingerując w wartość | 2 | 3 | 2 | 3 | |||
!wyrażenie |
1 | negacja logiczna – zwraca zanegowaną wartość wyrażenia, zero dla wartości niezerowych, jeden dla zera | 2 | 3 | 2 | 3 | |||
@x |
1 | operator kontroli błędów – zapewnia pominięcie wyświetlania ostrzeżeń systemowych dla danej instrukcji w celu samodzielnej kontroli błędów | - | - | - | 3 | |||
x*y |
2 | mnożenie/dzielenie – zwraca wartość iloczynu/ilorazu zmiennych | 3 | 4 | 3 | 4 | |||
x%y |
2 | dzielenie modulo – zwraca resztę z dzielenia wartości zmiennej x przez wartość y | 3 | 4 | 3 | 4 | |||
x+y |
2 | dodawanie/odejmowanie – zwraca wartość sumy/różnicy zmiennych | 4 | 5 | 4 | 5 | |||
x.y |
2 | operator złączenia łańcuchów znaków – zwraca łańcuch powstały ze złączenia x i y | - | - | - | 5 | |||
x<<y |
2 | przesunięcie bitowe w lewo/w prawo – zwraca zmienną x po przesunięciu wszystkich jej bitów o y pozycji w lewo/w prawo (przesunięcie o jedną pozycję w lewo odpowiada mnożeniu razy 2, przesunięcie o jedną pozycję w prawo odpowiada dzieleniu przez 2) | 5 | 6 | 5 | 6 | |||
x<y |
2 | logiczne operatory relacji, zwracające wartość niezerową, gdy x jest mniejszy/większy od y, zerową w przeciwnym wypadku | 6 | 7 | 6 | 7 | |||
x<=y |
2 | logiczne operatory relacji, zwracające wartość niezerową, gdy x jest mniejszy lub równy/większy lub równy y, zerową w przeciwnym wypadku | 6 | 7 | 6 | 7 | |||
x instanceof Y |
2 | operator porównujący typ zmiennej x z klasą/interfejsem Y | - | - | 7 | 3 | |||
x==y |
2 | logiczny operator relacji, zwracający wartość niezerową, gdy x jest równy y, zerową w przeciwnym wypadku | 7 | 8 | 7 | 8 | |||
x<>y |
2 | logiczny operator relacji, zwracający wartość niezerową, gdy x jest różny od y, zerową w przeciwnym wypadku | - | - | - | 8 | |||
x!=y |
2 | logiczny operator relacji, zwracający wartość niezerową, gdy x jest różny od y, zerową w przeciwnym wypadku | 7 | 8 | 7 | 8 | |||
x===y |
2 | logiczne operatory relacji z porównaniem typu, zwracające wartość niezerową, gdy x jest równe oraz tego samego typu co y/różne lub innego typu niż y, zerową w przeciwnym wypadku | - | - | - | 8 | |||
x&y |
2 | iloczyn bitowy – zwraca wartość wynikającą z operacji iloczynu logicznego na każdej parze bitów ze zmiennych x i y | 8 | 9 | 8 | 9 | |||
x^y |
2 | bitowa suma modulo 2 – zwraca wartość wynikającą z operacji sumy modulo 2 na każdej parze bitów ze zmiennych x i y | 9 | 10 | 9 | 10 | |||
x|y |
2 | suma bitowa – zwraca wartość wynikającą z operacji sumy logicznej na każdej parze bitów ze zmiennych x i y | 10 | 11 | 10 | 11 | |||
x&&y |
2 | iloczyn logiczny – zwraca wartość iloczynu logicznego wyrażeń x i y – niezerową, gdy oba wyrażenia są niezerowe, zerową w innych przypadkach | 11 | 12 | 11 | 12 | |||
x||y |
2 | suma logiczna – zwraca wartość sumy logicznej wyrażeń x i y – zerową, gdy oba wyrażenia są zerowe, niezerową w innych przypadkach | 12 | 13 | 12 | 13 | |||
x ? y : z |
3 | operator warunkowy – zwraca y, gdy x ma wartość niezerową, z w przeciwnym wypadku | 13 | 14 | 13 | 14 | |||
x=y |
2 | operator przypisania – przypisuje zmiennej x wartość zmiennej y | 14 | 15 | 14 | 15 | |||
x*=y x/=y |
2 | operatory przypisania – przypisują zmiennej x wartość odpowiednio x*y, x/y, itd. | 14 | 15 | 14 | 15 | |||
x and y |
2 | niskopriorytetowy iloczyn logiczny | - | - | - | 16 | |||
x xor y |
2 | niskopriorytetowa suma modulo 2 | - | - | - | 17 | |||
x or y |
2 | niskopriorytetowa suma logiczna | - | - | - | 18 | |||
wyr1, wyr2 |
2 | operator przecinkowy, służący np. do grupowania wyrażeń podczas inicjalizowania pętli | 15 | 16 | 15 | 19[3] | |||
(zmienna liczba jest typu int)
liczba *= ((liczba=10) + 7) % 3;
Nawiasy w tym przypadku wymusiły zmianę priorytetów operatorów. Działania wykonane zostaną w porządku narzuconym przez nawiasy. To samo wyrażenie pozbawione nawiasów:
liczba *= liczba = 10 + 7 % 3;
jest również poprawne ze względu na składnię. Wynik będzie jednak inny – pierwsza wykonana zostanie operacja dzielenia modulo, następnie dodawania, a na końcu oba przypisania od prawej do lewej.
W języku C kolejność obliczania operandów operatora nie jest gwarantowana ze względu na zastrzeżenie możliwości optymalizacji kodu wynikowego przez kompilator (nie dotyczy to operatorów &&, ||, ?: oraz ,). Użycie operandów, których obliczenie wartości wpływa na wartość pozostałych nie gwarantuje takiego samego wyniku we wszystkich implementacjach języka.
Np. kod:
int i = 1; tablica[i] = i++;
nie gwarantuje, czy wartość 1 zostanie wstawiona pod indeks 1, czy może pod indeks 2 tablicy.