Operator (programowanie)
Z Wikipedii
Operator - w programowaniu konstrukcja językowa jedno-, bądź dwuargumentowa zwracającą 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. Dany język posiada swoją listę operatorów wraz z ich priorytetami, mówiącymi o kolejności wykonywania operacji w przypadku, gdy nie zastosowano nawiasów.
[edytuj] 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) | ||||||
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.pole wskStr->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 | ||||
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 tworzenia listy argumentów | 15 | 16 | 15 | 19 |
- ↑ – w niektórych kompilatorach C i C++ dozwolony jest również zapis
n[tablica]
. Jest to spowodowane faktem, że operatortablica[n]
jest tłumaczony na*(tablica+n)
, a dodawanie jest przemienne. - ↑ – plus unarny wprowadzono w ANSI C
[edytuj] Przykładowy zapis w języku C
(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.
[edytuj] Zobacz też
[edytuj] Bibliografia
- Brian W. Kernighan, Dennis M. Ritchie - Język ANSI C Wyd. IX, WNT, Warszawa 2004 ISBN 83-204-2979-X