Съдържание
- Оператор за присвояване
- Аритметични оператори
- Оператори за сложни присвоявания
- Оператори за инкрементиране/декрементиране
- Оператори за сравняване
- Логически оператори
- Условен оператор
- Разделителен оператор
- Побитови оператори
- Оператор за промяна на типа данни (cast)
Увод
След като вече сме запознати с променливите и константите, може да започнем да работим с тях. За тази цел в този урок ще се запознаем с операторите в C++. За разлика от някои други езици за програмиране, в които операторите са главно съставени от ключови думи, в C++ те са знаци, които не са част от азбуката, но присъстват на всички клавиатури. Това си има и своите предимства: по-лесно е за учене и кодът става по-кратък.
Оператор за присвояване
Операторът за присвояване се използва за определяне стойност на променлива.
- a = 7;
Примерът показва как променливата a присвоява целочислената стойност 7. Страната от ляво на оператора за присвояване (=) е известна като lvalue (лява стойност), а от дясно rvalue (дясна стойност). Lvalue трябва да бъде променлива, докато rvalue може да бъде променлива, константа, резултат от операция или комбинация от вече споменатите. Най-важното правило, което трябва да запомните, е, че присвояването става от дясно на ляво и никога в другата посока. Например:
- left = right;
Променливата left присвоява стойността на променливата right, но не и обратното! Стойността, която е била съхранявана до този момент в променливата left, не играе роля в тази операция и всъщност тя вече е загубена.
Също така имайте предвид, че ние присвояваме стойността на променливата right в left само в момента на операцията за присвояване. Тоест по-нататъшни промени по стойността на променливата right няма да повлияят на стойността на left. Например:
- left = 5; // left == 5, right == ?
- right = 8; // left == 5, right == 8
- left = right; // left == 8, right == 8
- right = 10; // left == 8, right == 10
Привилегията на C++ пред другите програмни езици е, че операторът за присвояване може да бъде използван като rvalue (или част от rvalue) за друго присвояване. Например:
- a = b = c = 3;
В случая трите променливи a, b и c присвояват 3.
Още един пример:
- a = (b = 25) / 5;
Горният израз е еквивалентен на:
- b = 25;
- a = b / 5;
Това означава, че първо променливата b присвоява 25, а след това a присвоява стойността на b, разделена на 5. Крайната стойност на a остава 5.
Аритметични оператори
Аритметични оператора в C++ са:
Оператор | Описание |
---|---|
+ | събиране |
– | изваждане |
* | умножение |
/ | деление |
% | остатък |
Операторите за събиране, изваждане, умножение и деление предполагам са ясни на всички. Единственият, който може би не сте виждали е %. Той връща остатъка от делението на 2 стойности. Например ако напишем:
- a = 73 % 10;
Променливата a ще присвои 3 за стойност, защото 3 е остатъка от делението на 73 с 10.
Сложни присвоявания
Когато искаме да променим стойността на променлива чрез извършване на операция с текущата и стойност, можем да използваме така наречените оператори за сложно присвояване. Операторите са следните: +=, -=, *=, /=
Използването им е демонстрирано в следната табела:
Кога се използва? | Как се използва? |
---|---|
a = a + b | a += b |
a = a – b | a -= b |
a = a * b | a *= b |
a = a / b | a /= b |
Оператори за инкрементиране и декрементиране
Някои изрази могат да се съкратят дори повече. Операторът за инкрементиранe (++) и операторът за декрементиране (–) увеличават или съответно намаляват дадена стойност на променлива с една единица. Те са еквивалентни на +=1 и -=1. Следователно следните 3 израза:
- a = a+1;
- a += 1;
- a++;
са еквивалентни в тяхната функционалност. И трите увеличават стойността на променливата а с 1.
Характерно за този оператор е, че може да се използва като префикс(представка) и като суфикс(наставка). Това означава, че може да се напише както преди името на променливата (++a), така и след него (a++). Разликата между двата начина се проявява в по-сложни изрази с присвояване. Например:
- a = 12;
- b = a++;
След изпълнението на горния израз, стойността на a e 13, а на b e 12.

След изпълнението на горния израз стойността на a и b e 13.
Оттук можем да направим извода: Когато операторът е пред името на променливата, стойността й първо се увеличава с 1 и тогава се присвоява. Когато операторът е след името на променливата, стойността й първо се присвоява, а след това се увеличава.
Оператори за сравняване
Операторите за сравняване сравняват две стойности и връщат булева стойност – true или false. Операторите, които можем да използваме в C++, са:
Оператор | Значение |
---|---|
a == b | a равно на b |
a != b | a различно от b |
a > b | a по-голямо от b |
a < b | a по-малко от b |
a >= b | a по-голямо или равно на b |
a <= b | a по-малко или равно на b |
Бъдете внимателни! Не бъркайте оператора за присвояване (=) с оператора за сравняване (==).
Логически оператори
Операторът ! се използва в C++ за отрицание на булевите стойности. Тоест ако реалната стойност е TRUE, този оператор я превръща във FALSE и обратното. Пример:
- !true // връща False
- !false // връща True
- !(2 == 2) // връща False, защото израза (2 == 2) е верен и съответно отрицанието му е грешно
- !(2 == 4) // връща True
Забележете, че !(2 == 3) e еквивалентно на (2 != 3).
Логическите оператори && и || означават съответно логическото И и ИЛИ. Тоест когато ползваме && трябва и двете условия да са верни, за да върне резултат True, а когато използваме || е достатъчно само едно от условията да бъде вярно, така че целият израз да върне True. Пример:
- ( a && b ) // True, ако a == b == True, в противен случай False
- ( c || d ) // False, ако c == d == False, в противен случай True
- (2 == 2) || (1 > 10) // True (причината остава за упражнение)
- !(2 == 5) && !(5 > 8) // True (причината остава за упражнение)
Условен оператор
Условният оператор проверява дадено условие и в зависимост от това дали то е вярно, връща различни стойности. Структурата му е следната:
условие ? резултат_при_вярно_условие : резултат_при_грешно_условие
Пример:
- (5 > 10) ? „Yes“ : „No“ // връща „No“, защото 5 не е по-голямо от 10.
- (2 != 3) ? „Yes“ : „No“ // връща „Yes“, защото 2 не е равно на 3.
- (a < b) ? a : b // връща по-малката стойност
Разделителен оператор
Разделителният оператор ( , ) се използва за разделянето на два или повече израза, които са включени там, където се очаква само един. Например:
- a = (b=7, b*3);
Първо променливата b присвоява стойността 7, а след това a присвоява b*3, тоест 21. В крайна сметка b == 7, a == 21
Побитови оператори
& – AND – Bitwise AND
| – OR – Bitwise Inclusive OR
^ – XOR – Bitwise Exclusive OR
~ – NOT – Unary complement (bit inversion)
<< – SHL – Shift Left
>> – SHR – Shift Right
В примерите ще използвам двоичните кодове на числата 10 и 20:
10 – 1010
20 – 10100
Операторът & сравнява два бита и връща 1 (true), само когато и двата бита са 1, в противен случай връща 0 (false):
01010
10100
––
00000
Операторът | сравнява два бита и връща 0 (false), само когато и двата са 0, в противен случай връща 1 (true):
01010
10100
––
11110
Операторът ^ сравнява два бита и връща 1 (true), когато двата бита са различни, тоест единият е 0, другият 1, а когато са еднакви 1 и 1 или 0 и 0 връща 0 (false):
01010
10100
––
11110
Операторът ~ се използва за инвертиране. Тоест където има 1 става 0 и обратното.
01010 става 10101, а
10100 става 01011.
Операторите << и >> се използват за изместване на битовете съответно на ляво и на дясно. Структурата е:
стойност << брой битове
стойност >> брой битове
На мястото на брой битове пишете с колко бита искате дадената стойност да се измести на ляво и на дясно, като празното пространство, което остава при местене, се запълва с 0, а краят се загубва.
Оператор за промяна на типа данни (cast)
Този оператор ни позволява да променяме типа данни на някои стойности. Например ако имаме число с плаваща запетая, но искаме да го присвоим към променлива от целочислен тип, можем да го направим по следния начин.
- int intPI;
- float PI = 3.14159265359;
- intPI = (int) PI;
След изпълнението на горния код, стойността в променливата intPI e 3.
Автор: Мартин Михайлов