For faster navigation, this Iframe is preloading the Wikiwand page for Operator (programowanie).

Operator (programowanie)

Operator – konstrukcja językowa jedno-, bądź wieloargumentowa zwracająca wartość.

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 oraz umiejscowienie operatora względem operandów. 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ść.

Umiejscowienie względem operandów

[edytuj | edytuj kod]

Operator umieszczany przed swoimi operandami nazywa się operatorem przedrostkowym (prefiksowym), po operandach — przyrostkowym (postfiksowym), pomiędzy operandami — wrostkowym (infiksowym). Dla operatorów składających się z kilku symboli leksykalnych powyższe rozróżnienie nie zachodzi.

Pierwszeństwo, priorytet

[edytuj | edytuj kod]

Pierwszeństwo operatorów określa jak należy interpretować wyrażenie gdzie na jednym poziomie (struktury nawiasowej) występują dwa operatory. Przykładowo a + b * c może być interpretowane jako (a + b) * c lub a + (b * c). Gdy + ma wyższy priorytet niż *, zachodzi sytuacja pierwsza. Gdy jest na odwrót — druga. Projektanci języków programowania starają się tak dobierać priorytety, żeby odpowiadały intuicji w typowych konstrukcjach. Na przykład operatory arytmetyczne mają priorytety zgodne z kolejnością wykonywania działań, niższy priorytet mają operatory porównania a jeszcze niższy operatory logiczne. Dlatego wyrażenie 1+2*x < 3 || x==0 nie musi być zapisane jako ((1+(2*x)) < 3) || (x==0).

Łączność, wiązanie

[edytuj | edytuj kod]
 Osobny artykuł: Łączność (matematyka).

Łączność to cecha operatorów pozwalająca jednoznacznie interpretować wyrażenie w którym występują operatory o tym samym priorytecie (w szczególności kilka wystąpień tego samego operatora). Wyrażenie a+b-c będzie zinterpretowane jako (a+b)-c jeśli operatory + i - są lewostronnie łączne a a+(b-c) jeśli prawostronnie łączne. Operatory o tym samym priorytecie ale innej łączności nie mogą być mieszane ze sobą. Operatory mogą nie być łączne, wtedy również ich mieszanie z innymi jest niedozwolone. W większości języków podstawowe operatory arytmetyczne są łączne lewostronnie, natomiast operatory potęgowania czy przypisania prawostronnie.

Przykładowy zapis w języku C

[edytuj | edytuj kod]

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

Zobacz też

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]

Bibliografia

[edytuj | edytuj kod]
  • Brian W. Kernighan, Dennis M. Ritchie: Język ANSI C. Warszawa: WNT, 2004. ISBN 83-204-2979-X.
  • Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: Kompilatory Reguły, metody i narzędzia. Warszawa: WNT, 2002, seria: Klasyka informatyki. ISBN 83-204-2656-1.
{{bottomLinkPreText}} {{bottomLinkText}}
Operator (programowanie)
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?