Lista operatorów w najpopularniejszych językach
(do uzupełnienia o pozostałe języki)
operator
liczba
argumentó
w
działanie i zwracana
wartość
występowanie i priorytet (1 –
najwyższy)
zakres::x
::x
2
określenie zakresu lub
przestrzeni nazw danej
zmiennej/odwołanie do
zmiennej globalnej –
zwraca wartość zmiennej
-
1
-
1
Str.pole
wskStr->pole
2
wartość wybranego pola
1 2
1
2
2
wybór wartości z pola
indeksie – zwraca wartość
wybranego pola
1 2
1
2
funkcja()
zm.
wywołanie
operator o zmiennej
liczbie argumentów,
zwraca wartość funkcji
1 2
1
2
sizeof(obiek
t)
1
zwraca rozmiar obiektu
(zmiennej, typu) w
1 2
-
-
new typ
delete x
1
dynamiczną zmienną
danego typu/zwalnia
zaalokowaną pamięć
wskazywaną przez
wskaźnik x
-
2
2
1
*wsk
1
operator wyłuskania
wartości zmiennej ze
wartość zmiennej
2 3
-
3
&x
1
operator adresu – zwraca
fizyczny adres komórki
pamięci przechowującej
zmienną x; operator
2 3
-
3
(typ)zmienna
2
operator
zwraca wartość zmiennej
po zrzutowaniu na dany
typ
2 3
2
3
x++
x--
1
wartość zmiennej x,
następnie
zwiększa/zmniejsza ją o 1
2 3
2
3
++x
--x
1
zwiększa/zmniejsza
wartość zmiennej o 1 oraz
zwraca jej nową wartość
2 3
2
3
+x
-x
1
unarne operatory znaku
liczby – zwracają wartość
zmiennej po "dopisaniu"
znaku, nie ingerując w
wartość
3
2
3
~x
1
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
x/y
2
zwraca wartość
iloczynu/ilorazu
zmiennych
3 4
3
4
x%y
2
zwraca resztę z dzielenia
wartości zmiennej x przez
wartość y
3 4
3
4
x+y
x-y
2
– 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
x>>y
2
5 6
5
6
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)
x<y
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
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
x!==y
2
logiczne operatory relacji
z porównaniem typu,
zwracające wartość
niezerową, gdy x jest
równe oraz tego samego
-
-
-
8
typu co y/różne lub
innego typu niż y, zerową
w przeciwnym wypadku
x&y
2
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
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
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
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
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
x%=y x+=y
x-=y x<<=y
x>>=y x&=y
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
-
-
-
16
x xor y
2
-
-
-
17
x or y
2
-
-
-
18
wyr1, wyr2
2
operator przecinkowy,
służący np. do
grupowania wyrażeń
podczas inicjalizowania
pętli
15 16 15
(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.