Operatory
Stronę tą wyświetlono już: 3221 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

Tytuł:
Architektura oprogramowania bez tajemnic. Wykorzystaj język C++ do tworzenia wydajnych aplikacji i systemów
Autor:
Adrian Ostrowski, Piotr Gaczkowski

Tytuł:
Opus magnum C++ 11. Programowanie w języku C++. Wydanie II poprawione (komplet)
Autor:
Jerzy Grębosz

Tytuł:
Programowanie wieloplatformowe z C++ i wxWidgets 3
Autor:
Bartosz W. Warzocha

Tytuł:
Język C++ i przetwarzanie współbieżne w akcji. Wydanie II
Autor:
Anthony Williams

Tytuł:
C++ dla bystrzaków. Wydanie VII
Autor:
Stephen R. Davis

Tytuł:
Tablice informatyczne. Podstawy C++
Autor:
Radosław Sokół

Tytuł:
Opus magnum C++11. Programowanie w języku C++ (komplet)
Autor:
Jerzy Grębosz

Tytuł:
OpenCV 3. Komputerowe rozpoznawanie obrazu w C++ przy użyciu biblioteki OpenCV
Autor:
Adrian Kaehler, Gary Bradski

Tytuł:
C++ w 24 godziny. Wydanie VI
Autor:
Rogers Cadenhead, Jesse Liberty

Tytuł:
C++ Optymalizacja kodu. Sprawdzone techniki zwiększania wydajności
Autor:
Guntheroth Kurt