Operatory

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 4376 razy

W programowaniu stosuje się szereg różnych operatorów, które można podzielić na pewne podgrupy. Poniżej postaram się opisać operatory stosowane w języku C++.

Operatory matematyczne

Operator podstawienia wartości

W C++ dla odróżnienia wprowadzono, że operator = oznacza jedynie podstawienie pewnej wartości do danej zmiennej np. w następujący sposób:

int x = 1; int y = x;

Operatory porównania wartości

Tego typu operatory są stosowane w instrukcjach warunkowych takich jak if, else if, pętlach: for; do while oraz while, o których mowa będzie nieco później. Wszystkie operatory porównania wartości zwracają wartość typu bool mogącą przyjmować dwa stany: 1 (true) lub 0 (false).

Równość: == - zwraca true, gdy dwa argumenty są sobie równe, false w przeciwnym przypadku. Przykładowy kod:

bool warunek = 10 == 1; // efektem tego będzie zwrócenie wartości typu bool, w tym przypadku równej 0 (lub false)

Różne: != - zwraca true gdy dwa argumenty są różne od siebie, false w przeciwnym przypadku. Przykładowy kod:

bool warunek = 10 != 1; // efektem tego będzie zwrócenie wartości typu bool, w tym przypadku równej 1 (lub true)

Mniejsze niż: < - zwraca true gdy argument stojący po lewej stronie jest mniejszy od argumentu stojącego po prawej stronie. Przykładowy kod:

bool warunek = 10 < 1; // efektem tego będzie zwrócenie wartości typu bool, w tym przypadku równej 0 (lub false)

Większe niż: >

Mniejsze lub równe: <=

Większe lub równe: >=

Operator trójargumentowy porównania wartości warunek?gdy_prawda:gdy_fałsz, który zwraca wyrażenie gdy_prawda jeżeli warunek jest spełniony, w przeciwnym przypadku zwraca wyrażenie gdy_falsz. Przykład:

int k = 2 < 3 ? 2 : 3; // ponieważ 2 jest mniejsze od 3 zwrócona zostanie wartość 2

Operator dodawania

int y = 10, z = 20; int x = y + z;

Operator odejmowania

int y = 10, z = 20; int x = y - z;

Operatory znaku wartości

int x = 10, y =20; int z = -(x * y); int z2 = +x;

Operator inkrementacji

Operatorem inkrementacji jest ++. Używa się go w celu zwiększenia wartości zmiennej o 1. Przykład:

int x = 10; x ++; // zwiększanie wartości zawartej w zmiennej x o 1

Operator dekrementacji

Operatorem dekrementacji jest --. Używa się go w celu zmniejszenia wartości zmiennej o 1. Przykład:

int x = 10; x --; // zmniejszenie wartości zawartej w zmiennej x o 1

Operator mnożenia

int y = 10, z = 20; int x = y * z;

Operator dzielenia

int y = 10, z = 20; int x = y / z;

Operator modulo (reszty z dzielenia)

int y = 105, z = 20; int r = y % z; // wynikiem będzie 5

Operator dodawania z podstawieniem

int x = 10; x += 10; // jest to zapis równoważny x = x + 10;

Operator odejmowania z podstawieniem

int x = 10; x -= 10; // jest to zapis równoważny x = x - 10;

Operator mnożenia z podstawieniem

int x = 10; x *= 10; // jest to zapis równoważny x = x * 10;

Operator dzielenia z podstawieniem

int x = 10; x /= 10; // jest to zapis równoważny x = x / 10;

Operator reszty z dzielenia z podstawieniem

int x = 10; x %= 12; // jest to zapis równoważny x = x % 12;

Operacje na bitach

Tego typu operatory wykonują operacje na poszczególnych bitach, które mogą być operacjami: logicznymi lub przesunięcia wartości bitów.

Operator przesunięcia bitowego w prawo

Jeżeli mam liczbę 8-bitową, która w zapisie dwójkowym ma wartość 10000000 (odpowiadającą 128 w systemie dziesiętnym) to następująca operacja:

unsigned char x = 128; unsigned char y = x >> 3;

podstawi za y wartość równą w zapisie dwójkowym 00010000 (odpowiadającą 16 w systemie dziesiętnym).

Operator przesunięcia bitowego w lewo

unsigned char x = 16; unsigned char y = x << 3; // zwróci wartość 128 (dwójkowo 10000000)

Operator bitowej koniunkcji AND

Operatorem bitowej koniunkcji jest &. Gdy dana jest liczba w zapisie dwójkowym 10101010 (w dziesiętnym to będzie 170) i druga liczba 00001111 (w dziesiętnym 15) to operacja:

unsigned char x = 170; unsigned char y = 15; unsigned char z = x & z;

zwróci wartość w zapisie dwójkowym równą 00001010, ponieważ dla każdego bitu z tej samej pozycji w zmiennej x i y operacja koniunkcji zwraca 1 gdy oba bity są równe 1 natomiast 0 w przeciwnym przypadku.

Operator bitowej alternatywy OR

Operatorem bitowej alternatywy jest |. Gdy dana jest liczba w zapisie dwójkowym 10101010 (w dziesiętnym to będzie 170) i druga liczba 00001111 (w dziesiętnym 15) to operacja:

unsigned char x = 170; unsigned char y = 15; unsigned char z = x | z;

zwróci wartość w zapisie dwójkowym równą 00001111, ponieważ dla każdego bitu z tej samej pozycji w zmiennej x i y operacja alternatywy zwraca 1 gdy co najmniej jeden bit jest równy 1 natomiast 0 w przeciwnym przypadku.

Operator bitowej alternatywy wykluczającej (xor)

Operatorem bitowej alternatywy wykluczającej (xor) jest ^. Gdy dana jest liczba w zapisie dwójkowym 10101010 (w dziesiętnym to będzie 170) i druga liczba 00001111 (w dziesiętnym 15) to operacja:

unsigned char x = 170; unsigned char y = 15; unsigned char z = x ^ z;

zwróci wartość w zapisie dwójkowym równą 10100101, ponieważ dla każdego bitu z tej samej pozycji w zmiennej x i y operacja alternatywy wykluczającej zwraca 1 gdy bity mają różne wartości a 0 w przeciwnym przypadku.

Operator przesunięcia bitowego w prawo z podstawieniem

unsigned char y = 128; y >>= 3; // odpowiednik y = y >> 3;

Operator przesunięcia bitowego w lewo z podstawieniem

unsigned char y = 16; y <<= 3; // odpowiednik y = y << 3;

Operator bitowej alternatywy AND z jednoczesnym podstawieniem

unsigned char x = 170; unsigned char y = 15; y &= z; // odpowiada zapisowi y = y & z;

Operator bitowej koniunkcji OR z jednoczesnym podstawieniem

unsigned char x = 170; unsigned char y = 15; y |= z; // odpowiada zapisowi y = y | z;

Operator bitowej alternatywy wykluczającej XOR z jednoczesnym podstawieniem

unsigned char x = 170; unsigned char y = 15; y ^= z; // odpowiada zapisowi y = y ^ z;

Operator negacji bitowej NOT

Operatorem negacji bitowej (NOT) jest ~, jeżeli dana jest liczba, która w zapisie dwójkowym ma wartość 01010101 to negacją tej wartości będzie liczba w systemie dwójkowym 10101010. Przykładowy kod z użyciem tego operatora:

unsigned char x = 85; unsigned char y = ~x;

Operatory logiczne

Operator logicznej koniunkcji AND

Operatorem logicznej koniunkcji (AND) jest &&, zwraca wartość typu bool równą 1 (true), gdy warunki z lewej i prawej strony operatora są spełnione a 0 (false) w przeciwnym przypadku. Przykład:

bool w = 2 < 3 && 4 > 5; // zwróci fałsz, bo prawy warunek nie jest spełniony

Operator logicznej alternatywy OR

Operatorem logicznej alternatywy (OR) jest ||, zwraca wartość typu bool równą 1 (true), gdy co najmniej jeden z warunków jest spełniony, a 0 (false) w przeciwnym przypadku. Przykład:

bool w = 2 < 3 || 4 > 5; // zwróci prawdę, bo lewy warunek jest spełniony

Operatory związane z pamięcią

Operator wyłuskania wartości

Operatorem wyłuskania wartości jest *, umożliwia on wyciągnięcie z zmiennej typu wskaźnikowego wartości, na którą ta zmienna wskazuje. Przykład:

int *wsk = new int; // deklaracja zmiennej wskaźnikowej typu int *wsk = 1; // przypisanie do wartości zawartej pod adresem zmiennej wsk int k = *wsk; // podstawienie wartości na którą zmienna wsk wskazuje do zmiennej k

Operator wyłuskania adresu

Operatorem wyłuskania adresu jest &, umożliwia on wyciągnięcie z zmiennej adresu, pod którym jego wartość została zapisana. Przykład:

int k = 0; int *wsk = &k; // przypisanie zmiennej wskaźnikowej wsk wartości adresu pod którym została zapisana zmienna wartość zmiennej k

Operator dynamicznego przydzielania pamięci

Operatorem dynamicznego przydzielania pamięci jest new, umożliwia on dynamiczne przydzielenie pamięci do zmiennej wskaźnikowej. Przykład:

int *wsk = new int; // przydzielania pamięci pojedynczego elementu typu int int *wsk2 = new int [20]; // przydzielanie pamięci 20 elementów typu int

Operator dynamicznego przydzielania pamięci

Operatorem dynamicznego zwalniania pamięci jest delete, umożliwia on dynamiczne przydzielenie pamięci do zmiennej wskaźnikowej. Przykład:

int *wsk = new int; // przydzielania pamięci pojedynczego elementu typu int int *wsk2 = new int [20]; // przydzielanie pamięci 20 elementów typu int if(wsk){ // jeżeli wsk nie jest równe zero to delete wsk; // tak zwalnia się pamięć dla pojedynczego elementu wsk = 0; // trzeba potem przypisać zero, żeby było wiadomo, że pamięć została zwolniona a wskaźnik już nie wskazuje na nic } if(wsk2){ delete[] wsk2; // tak się zwalnia pamięć dla wielu elementów wsk2 = 0; }

Operator indeksowania elementów tablicy

Operatorem indeksowania elementów tablicy (jak i ich deklaracji) jest []. Przykład:

int tablica[] = {12,23,43,54,54}; // deklaracja statyczna tablicy int k = tablica[0]; // odwołanie się do pierwszego elementu tablicy

Operatory dostępu do elementów wewnętrznych struktur i klas

Operator rozróżnienia zakresu

Operatorem rozróżnienia zakresu jest ::. Typowym przykładem jego użycia jest dostęp do strumieni std::cout, i std::cin, o których nieco później będzie mowa.

Operator dostępu pośredniego

nazwa_klasy *obiekt = new nazwa_klasy; obiekt->metoda_klasy();

Operator dostępu bezpośredniego

nazwa_klasy obiekt; obiekt.metoda_klasy();

Operator rzutowania typów

Operator rzutowania typu to ( typ_zmiennej_rzutujacej ). Służy do zamiany (zrzutowania) zmiennej jednego typu na zmienną typu innego. Przykład:

int x = 20; double k = (double)x / 100; // gdybym nie zrzutował, to by zły wynik wyszedł double k2 = double(x) / 100; // drugi sposób rzutowania

Operator ustalania rozmiarów danych

Operatorem ustalania rozmiaru danych jest sizeof(). Operator ten zwraca rozmiar danego typu zmiennej wyrażony w bajtach. Przykład:

int sizeInt = sizeof(int); // ustala rozmiar typu int int sizeOfsizeInt = sizeof(sizeInt); // ustala rozmiar zmiennej sizeInt
Propozycje książek