OPERATORY I WYRAŻENIA C


OPERATORY I WYRAŻENIA C++

Operatory w C++ pełnią funkcję podobną jak operatory w matematyce. Umożliwiają one po prostu przeprowadzanie różnych działań na zmiennych.

Najważniejszy operator - operator przypisania

Jednym z najważniejszych operatorów w języku C++ jest operator przypisania. Operator ten umożliwia przypisywanie wartości danej zmiennej.

=   operator przypisania (to nie jest operator równości!)

Należy zwrócić uwagę na zapis - operator ten przypomina matematyczny operator równości, ale to nie jest operator równości, tylko operator przypisania. Aby dokonać przypisania, po lewej stronie operatora musimy mieć zmienną. Po prawej stronie możemy natomiast mieć zmienną, jakąś liczbę, znak lub napis (czyli tzw. literał) albo wyrażenie (na przykład sumę dwóch liczb, różnicę zmiennej i liczby itp.).

Oto przykładowy program demonstrujący użycie operatora przypisania:

#include <iostream>

#include <string>

using namespace std;

int main()

{

  int liczba;

  string napis;

  char znak;

  liczba=45; // operator przypisania dla liczby
  napis
=" Programowanie "; // operator przypisania dla napisu
  znak
='c'; //operator przypisania dla znaku

  cout <<"Oto wartosci zmiennych: "<<liczba<<' '<<napis<<' '<<znak<<"\n\n";

  cout <<"Podaj wartosc liczby: ";

  cin >>liczba;

  cin.ignore();

  cout <<"Wpisz jakis napis (bez bialych znakow): ";

  cin >>napis;

  cin.ignore();

  cout <<"Podaj znak: ";

  cin >>znak;
  cin
.ignore();
  cout
<<"Oto wartosci zmiennych: "<<liczba<<' '<<napis<<' '<<znak<<"\n\n";
  cout
<<"Nacisnij ENTER aby zakonczyc\n";
  getchar
();
 
return 0;    
}

Operator przypisania możemy zastosować do różnych typów danych. W przykładowym programie, zastosowano go zarówno dla liczby , dla znaku oraz napisu.

Operatory arytmetyczne

Kolejną grupę stanowią operatory arytmetyczne. Operatory te działają jak znane z matematyki operatory. Oto lista dostępnych operatorów arytmetycznych:

+   operator dodawania
-    operator odejmowania
*   operator mnożenia
/    operator dzielenia
%   operator reszty z dzielenia (z
wany operatorem modulo)
+   operator znaku liczby (np. +3). Liczba domyślnie jest zawsze dodatnia.
-    operator znaku liczby (np. -45, -5.678)

Większość z wyżej wymienionych operatorów arytmetycznych działa tylko i wyłącznie dla typów liczbowych. Niektóre z operatorów działają również na typie znakowym czy napisowym, lecz tych operatorów używa się wyłącznie dla typów liczbowych. Warto zwrócić uwagę, na operator reszty z dzielenia %. Operator ten zwraca resztę z dzielenia, czyli np. 10%3 da nam wynik 1, 5%5 da nam wynik 0, 3%5 da nam wynik 3. Aby stosować ten operator, po jego obu stronach musimy mieć liczby całkowite dodatnie. Na przykład dla operacji 5%-5 wynik operacji jest nieokreślony. Zastosowanie operatorów arytmetycznych jest bardzo duże. Z punktu widzenia składni języka, poprawne następujące wyrażenia:

2 + 3
2 * 3 - 5
2 + 6 + 8 + 10
2 / 3 * 2

Można wykonywać bez problemu operacje matematyczne nawet dla większej grupy liczb. To, w jakiej kolejności będą wykonywane działania, zależy od priorytetów operatorów. Akurat w przypadku operatorów arytmetycznych, priorytety operatorów są takie same, jak to wiemy z lekcji matematyki.

Oto przykładowy program pokazujący zastosowanie operatorów arytmetycznych.

#include <iostream>
using namespace std;
int main()
{
 
int liczba1;
 
int liczba2;
 
double liczba3;
 
double liczba4;
  liczba1
=14;
  liczba2
=6;
  liczba3
=56.78;
  liczba4
=22.11;
  cout
<<liczba1<<' '<<liczba2<<' '<<liczba3<<' '<<liczba4<<'\n';
  cout
<<"Suma dwoch liczb: "<<liczba1+liczba2<<'\n';
  cout
<<"Roznica dwoch liczb: "<<liczba2-liczba3<<'\n';
  cout
<<"Reszta z dzielenia: "<<liczba1%liczba2<<'\n';
  liczba1
=liczba1%liczba2; // zmiana wartosci zmiennej liczba1
  cout
<<liczba1<<' '<<liczba2<<' '<<liczba3<<' '<<liczba4<<'\n';
  liczba3
=liczba4-liczba1+liczba2; //zmiana wartosci zmiennej liczba3
  cout
<<liczba1<<' '<<liczba2<<' '<<liczba3<<' '<<liczba4<<'\n';
  cout
<<"Suma wszystkich liczb: "<<liczba1+liczba2+liczba3+liczba4<<'\n';
  cout
<<"Inne: "<<liczba1*liczba2+liczba3/liczba4-liczba2*liczba4<<'\n';
  cout
<<liczba1<<' '<<liczba2<<' '<<liczba3<<' '<<liczba4<<'\n';
  cout
<<"\nNacisnij ENTER aby zakonczyc\n";
  getchar
();
 
return 0;    
}

W powyższym programie zastosowano różne operatory. Można zaobserwować, że rzeczywiście można uzyskać bardzo różne wyniki. Jednak najciekawszą sprawą jest możliwość zmiany wartości zmiennej. W linijkach opatrzonych komentarzami, dzięki zastosowaniu operatorów arytmetycznych oraz co ważniejsze operatora przypisania, zmieniamy wartość zmiennej.

Zmiana wartości zmiennej w oparciu o nią samą

Dość często w programach zdarza się, że chcemy np. dodać do obecnej zmiennej typu liczbowego pewną wartość lub wyrażenie. Np. dla zmiennej o nazwie liczba, zwiększenie jej wartości o 2 uzyskujemy pisząc:

liczba=liczba+2; Co prawda sam zapis może jest na początku trochę dziwny, jednak można go dosłownie przetłumaczyć sobie tak: nowej wartości zmiennej liczba przypisz sumę obecnej wartości tej zmiennej i liczby 2.

Tego typu operacje wykonywane są bardzo często. Oprócz chęci dodania do zmiennej danej wartości lub wyrażenia, możemy chcieć zastosować również odejmowanie, mnożenie, dzielenie czy przypisanie reszty z dzielenia.

W związku z tym, że tego typu operacje wykonywane są w języku C++ naprawdę bardzo często, została stworzona specjalna grupa operatorów, która umożliwia szybsze zapisanie wykonywanej operacji w oparciu o już istniejącą wartość zmiennej. Grupą tą są złożone operatory przypisania.

Oto najważniejsze złożone operatory przypisania:

+=   zmienna += 2 to to samo co zmienna = zmienna + 2
-=   zmienna -= 2 to to samo co zmienna = zmienna - 2
*=   zmienna *= 2 to to samo co zmienna = zmienna * 2
/=   zmienna /= 2
to to samo co zmienna = zmienna / 2
%=  zmienna %= 2 to to samo co zmienna = zmienna % 2

Dzięki stosowaniu powyższych operatorów, można w znacznie prostszy sposób zapisywać pewne operacje, co w rezultacie doprowadzi do zaoszczędzenia cennego czasu.

Operatory logiczne


- operatory relacji
Są to operatory: > >= < <=
W wyniku działania tych operatorów otrzymujemy odpowiedź: prawda (true - 1) lub fałsz (false - 0). Priorytet tych operatorów jest taki sam .

- operatory przyrównania
Są to operatory == !=.
Ich priorytet jest niższy niż priorytet operatorów relacji

- operatory sumy i iloczynu logicznego
Są to operatory:
|| - realizujący sumę logiczną (LUB - alternatywa)
&& - realizujący iloczyn logiczny (I - koniunkcja)

- operator negacji !
Jest to operator je
dnoargumentowy i stoi zawsze po lewej stronie operandu:
!n

Operatory bitowe
Operatory te są charakterystyczne dla sposobu przechowywania informacji w komputerze (w postaci binarnej). Wiadomo, że w komputerze informacja gromadzona jest w postaci zero-jedynkowej. Te elementarne jednostki informacji (0 lub 1) nazywane są bitami. Komputer jednak nie odnosi się najczęściej do poszczególnych bitów, lecz gromadzi je w słowa, najczęściej 2 bajtowe. Informacje zapisane w słowie nie koniecznie muszą oznaczać konkretnych liczb. W jednym słowie można przechowywać szereg informacji na poszczególnych bitach słowa. Do pracy na p
oszczególnych bitach słowa służą właśnie operatory bitowe:
<< - przesunięcie w lewo
>> - przesunięcie w prawo
& - bitowy iloczyn logiczny
| - bitowa suma logiczna
^ - bitowa różnica symatryczna (bitowe exclusive OR)
~ - bitowa negacja

Priorytet

Operator

Funkcja

Zastosowanie

17

::
::

wyłuskanie składnika klasy
odsłonięcie nazwy globalnej

nazwa_klasy::składnik
::nazwa_globalna

16

->
[]
()
()

dostęp do składnika
dostęp do elementu tablicy
wywołanie funkcji
nawias w wyrażeniach

wskaźnik->składnik
tablica
[nr]
funkcja
(argumenty)
(wyrażenie)

15

sizeof
sizeof
++
++
--
--
~
!
-
+
&
*
new
delete
delete[]
()

rozmiar obiektu

rozmiar typu

postinkrementacja

preinkrementacja

postdekrementacja

predekrementacja

bitowa nagacja

negacja

minus jednoargumentowy

plus jednoargumentowy

adres obiektu

dostęp do obiektu wskazywanego

tworzenie obiektów

likwidacja obiektów

likwidacja tablic

rzutowanie typu

sizeof(obiekt)
sizeof(nazwa_typu)
lwartość
++
++lwartość
lwartość
--
--lwartość
~wyrażenie
!wyrażenie
-wyrażenie
+wyrażenie
&lwartość
*wskaźnik
new nazwa_typu
delete wskaźnik
delete[] wskaźnik
(typ)wyrażenie

14


.*
->*

Wybór składnika wskaźnikiem i:
- nazwą obiektu
- wskaźnikiem do obiektu


obiekt
.*wskaźnik_do_składnika
wskaźnik
->*wskaźnik_do_składnika

13

*
/
%

mnożenie
dzielenie
dzielenie modulo

wyrażenie * wyrażenie
wyrażenie
/ wyrażenie
wyrażenie
% wyrażenie

12

+
-

dodawanie
odejmowanie

wyrażenie + wyrażenie
wyrażenie
- wyrażenie

11

<<
>>

przesunięcie bitów w lewo
przesunięcie bitów w prawo

wyrażenie << wyrażenie
wyrażenie
>> wyrażenie

10

<
<=
>
>=

mniejsze od...
mniejsze lub równe...
większe od...
większe lub równe...

wyrażenie < wyrażenie
wyrażenie
<= wyrażenie
wyrażenie
> wyrażenie
wyrażenie
>= wyrażenie

9

==
!=

równe
różne od

wyrażenie == wyrażenie
wyrażenie
!= wyrażenie

8

&

iloczyn bitowy

wyrażenie & wyrażenie

7

^

bitowa różnica symetryczna

wyrażenie ^ wyrażenie

6

|

suma bitowa

wyrażenie | wyrażenie

5

&&

koniunkcja (iloczyn logiczny)

wyrażenie && wyrażenie

4

||

alternatywa (suma logiczna)

wyrażenie || wyrażenie

3

?:

wyrażenie warunkowe

warunek ? wyrażenie : wyrażenie

2

=
*=
/=
%=
+=
-=
<<=
>>=
&=
|=
^=

zwykłe przypisanie

mnożenie z przypisaniem

dzielenie z przypisaniem

dzielenie modulo z przypisaniem

dodawanie z przypisaniem

odejmowanie z przypisaniem

przesunięcie w lewo z przypisaniem

przesunięcie w prawo z przypisaniem

iloczyn bitowy z przypisaniem

suma bitowa z przypisaniem

różnica symetryczna z przypisaniem

lwartość = wyrażenie
lwartość
*= wyrażenie
lwartość
/= wyrażenie
lwartość
%= wyrażenie
lwartość
+= wyrażenie
lwartość
-= wyrażenie
lwartość
<<= wyrażenie
lwartość
>>= wyrażenie
lwartość
&= wyrażenie
lwartość
|= wyrażenie
lwartość
^= wyrażenie

1

,

wyrażenie przecinkowe

wyrażenie, wyrażenie

Wyrażenia i wartości

W C++ istnieją różne rodzaje wyrażeń. Wyrażenie proste jest to takie wyrażenie, które nie wykonuje żadnej operacji i symbolizuje tylko własną wartość. Wyrażenie złożone zaś jest to wyrażenie, w którym wartość jest uzyskiwana przez wykonanie jakiejś operacji z użyciem operatorów. Jeśli mamy np. a = abs( t ); to `a', `abs' i `t' są wyrażeniami prostymi, natomiast `abs( t )' i pozostałe, które można wyróżnić to już wyrażenia złożone. Wyrażenie proste można nazywać WARTOŚCIĄ, natomiast wyrażenie złożone po prostu WYRAŻENIEM.

Wyrażenie składa się z wartości powiązanych odpowiednimi operatorami. W podanym wyrażeniu:

a = abs( t );

`abs' jest również wartością. Dla tej wartości został użyty operator (), który oznacza wywołanie funkcji o podanej przed nim nazwie, podając odpowiednie argumenty, zawarte wewnątrz nawiasów. Tutaj zarówno `abs' jak i `t' są argumentami funkcji `operator()'.

Oczywiście powyższe wyrażenie może być podwyrażeniem innego wyrażenia; zwraca ono bowiem odniesienie do `a', do którego nastąpiło przypisanie. Całość wyrażenia jednak jest operacją (wyrażenie to jest afektywne) i kwalifikuje się do bycia instrukcją.

Ponieważ wyrażenie zawiera jakieś dane źródłowe i wskazuje operacje do wykonania na nich, wykonanie tych operacji wraz z otrzymaniem wyniku (czyli "obliczanie" wyrażenia), zwane jest często "wartościowaniem" wyrażenia (ang. evaluation). Określenie "obliczanie" też się często używa, aczkolwiek niezbyt ono pasuje; sugeruje bowiem, że wszelkie wyniki przeprowadzonych operacji są zwracane jako wartość wyrażenia, tzn. operacja obliczania wyrażenia jest nieafektywna (nie zostawia śladów); lecz tak jest nie zawsze. Przykładem takiego afektywnego wyrażenia jest `c++', gdzie wynik przeprowadzonej operacji znajduje się w zmiennej `c', a wynikiem wyrażenia jest poprzednia wartość zmiennej (a więc, bez wykonania tej operacji i tak otrzymalibyśmy tą samą wartość wyrażenia).



Wyszukiwarka

Podobne podstrony:
05 Operatory, wyrażenia i instrukcje
05 Operatory, wyrażenia i instrukcje
05 Operatory i wyrażenia
Wyrażenia logiczne. Operatory przypisania
The uA741 Operational Amplifier[1]
operatory i funkcje matematyczne
operator maszyn lesnych 833[02] o1 03 n
mechanik operator pojazdow i maszyn rolniczych 723[03] z2 04 n
Kierowca operator wózków jezdniowych 833401
mechanik operator pojazdow i maszyn rolniczych 723[03] o1 05 u
OPERAT STABLE VERSION ugoda id Nieznany
operator urzadzen przemyslu szklarskiego 813[02] z2 07 n
4 Steyr Operation and Maintenance Manual 8th edition Feb 08
operator urzadzen przemyslu spozywczego 827[01] z2 02 u

więcej podobnych podstron