Definicja[]
Operatory są znakami, które wykonują na wyrażeniach proste operacje. Wyróżniamy kilka rodzajów operatorów, które dodatkowo dzielą się na:
- jednoargumentowe (stoni przy nim jedno wyrażenie)
- dwuargumentowe (stoją przy nim dwa wyrażenia)
Dodatkowo, podobnie jak w matematyce istnieje kolejność wykonywania działań, tak samo w programowaniu istnieją priorytety operatorów. Mogą się nieco różnić w każdym języku, oto tabela przedstawiająca priorytety w kilku znanych językach programowania (w CBOT prawdopodobnie opiera się to na języku C++): Tabela
Operatory arytmetyczne[]
Przyjmują dwa argumenty.
Nazwa | Zastosowanie |
---|---|
Dodawania | wyrażenie + wyrażenie |
Odejmowanie | wyrażenie - wyrażenie |
Mnożenie | wyrażenie * wyrażenie |
Dzielenie | wyrażenie / wyrażenie |
Reszta z dzielenia |
wyrażenie % wyrażenie |
Operatory + i -[]
Przyjmują jeden argument.
Nazwa | Zastosowanie |
---|---|
Bez zmiany wartości | +wyrażanie |
Zmiana wartości na liczbę przeciwną | -wyrażenie |
Operatory inkrementacji i dekrementacji[]
Przyjmują jeden argument
Nazwa | Zastosowanie |
---|---|
Preinkrementacja | ++wyrażenie |
Postinkrementacja | wyrażenie++ |
Predekrementacja | --wyrażenie |
Postdekrementacja |
wyrażenie-- |
Do początkujących:[]
Chodzi o zwiększenie wartości wyrażenia o 1. Innymi słowy po takiej operacji:
i++; j++;
Zakładając, że zmienne i i j miały wczesniej wartość 0, po tym kodzie będą równe 1. W przypadku dekrementacji miałyby wartość -1.
Różnica między pre- i post-
Cytat z książki Jerzego Grębosza, Symfonia C++:
Jeśli operator inkrementacji (zwiększenia) stoi przed zmienną, to: * najpierw jest ona zwiększana o 1, * następnie ta zwiększona wartość już staje się wartością wyrażenia Jeśli operator inkrementacji stoi za zmieną, to: * najpierw brana jest stara wartość tej zmiennej i ona staje się wartością wyrażenia, * a następnie zwiększany jest o 1. Zwiększenie nie wpłynęło więc jeszcze na wartość samego wyrażenia
Tak samo przy dekrementacji. Jeśli nie jesteś pewien, z której strony chcesz postawić operator to lepiej zrób to przed zmienną.
Operatory przypisania[]
Przyjmuje jeden argument.
Nazwa | Zastosowanie |
---|---|
Przypisanie |
wyrażenie = wyrażenie |
Do obiektu stojącego jego po lewej stronie przypisuje wartość obiektu stojącego po jego prawej stronie.
Istnieją także operatory przypisania stworzone dla wygody programisty.
Nazwa | Zastosowanie | Przykład/analogia |
---|---|---|
Zwiększenie | wyrażenie += wyrażenie | i+=1 / i = i + 1 |
Zmniejszenie | wyrażenie -= wyrażenie | i-=1 / i = i - 1 |
Pomnożenie | wyrażenie *= wyrażenie | i*=1 / i = i * 1 |
Podzielenie | wyrażenie /= wyrażenie | i*=1 / i = i * 1 |
Operatory logiczne[]
Zwracają w wyniku typ logiczny.
Operatory relacji[]
Przyjmują dwa argumenty.
Nazwa | Zastosowanie |
---|---|
Mniejszy niż | wyrażenie < wyrażenie |
Mniejszy lub równy niż | wyrażenie <= wyrażenie |
Większy niż | wyrażenie > wyrażenie |
Większy lub równy niż | wyrażenie >= wyrażenie |
Równa się | wyrażenie == wyrażenie |
Jest różne od |
wyrażenie != wyrażenie |
Uwaga: Operator równa się == łatwo pomylić z operatorem przypisania =, zwłaszcza przy pisaniu warunków, co może skutkować katastrofą.
Inne[]
Przyjmują dwa argumenty (wyj. negacja).
Nazwa | Zastosowanie |
---|---|
Suma logiczna (alternatywa) (LUB) |
wyrażenie || wyrażenie |
Iloczyn logiczny (koniunkcja) (I) | wyrażenie && wyrażenie |
Negacja | !wyrażenie |
Do początkujących:[]
Suma logiczna: JEŚLI wyrażenie1 jest prawdą LUB wyrażenie2 jest prawdą ZWRÓĆ prawdę.
Iloczyn logiczny: JEŚLI wyrażenie1 jest prawdą I wyrażenie2 jest prawdą ZWRÓĆ prawdę.
Negacja: ZWRÓĆ wartość przeciwną. np. !n == prawda, gdy n jest równe 0.
Wyrażenie warunkowe[]
Przydatne wyrażenie, właściwie samo w sobie nie jest operatorem. Składnia:
warunek ? wartość_dla_prawdy : wartość_dla_fałszu
Nie trzeba chyba niczego tłumaczyć, ale dla pewności przykład:
bool jeden = true, dwa = true; int logic_int; logic_int = ( (jeden == true) ? 0 : 1 );
Ostatnią linijkę można przetłumaczyć tak:
Do zmiennej logic_int przypisz wartość 0, jeśli zmienna jeden jest równa true, lub 1, jeśli false.