Съдържание

 

  1. Оператор за присвояване
  2. Аритметични оператори
  3. Оператори за сложни присвоявания
  4. Оператори за инкрементиране/декрементиране
  5. Оператори за сравняване
  6. Логически оператори
  7. Условен оператор
  8. Разделителен оператор
  9. Побитови оператори
  10. Оператор за промяна на типа данни (cast)

 

Увод

След като вече сме запознати с променливите и константите, може да започнем да работим с тях. За тази цел в този урок ще се запознаем с операторите в C++. За разлика от някои други езици за програмиране, в които операторите са главно съставени от ключови думи, в C++ те са знаци, които не са част от азбуката, но присъстват на всички клавиатури. Това си има и своите предимства: по-лесно е за учене и кодът става по-кратък.

Оператор за присвояване

Операторът за присвояване се използва за определяне стойност на променлива.

  1. a = 7;

Примерът показва как променливата a присвоява целочислената стойност 7. Страната от ляво на оператора за присвояване (=) е известна като lvalue (лява стойност), а от дясно rvalue (дясна стойност). Lvalue трябва да бъде променлива, докато rvalue може да бъде променлива, константа, резултат от операция или комбинация от вече споменатите. Най-важното правило, което трябва да запомните, е, че присвояването става от дясно на ляво и никога в другата посока. Например:

  1. left = right;

Променливата left присвоява стойността на променливата right, но не и обратното! Стойността, която е била съхранявана до този момент в променливата left, не играе роля в тази операция и всъщност тя вече е загубена.

Също така имайте предвид, че ние присвояваме стойността на променливата right в left само в момента на операцията за присвояване. Тоест по-нататъшни промени по стойността на променливата right няма да повлияят на стойността на left. Например:

  1. left = 5; // left == 5, right == ?
  2. right = 8; // left == 5, right == 8
  3. left = right; // left == 8, right == 8
  4. right = 10; // left == 8, right == 10

Привилегията на C++ пред другите програмни езици е, че операторът за присвояване може да бъде използван като rvalue (или част от rvalue) за друго присвояване. Например:

  1. a = b = c = 3;

В случая трите променливи a, b и c присвояват 3.

Още един пример:

  1. a = (b = 25) / 5;

Горният израз е еквивалентен на:

  1. b = 25;
  2. a = b / 5;

Това означава, че първо променливата b присвоява 25, а след това a присвоява стойността на b, разделена на 5. Крайната стойност на a остава 5.

Аритметични оператори

Аритметични оператора в C++ са:

Оператор Описание
+ събиране
изваждане
* умножение
/ деление
% остатък

Операторите за събиране, изваждане, умножение и деление предполагам са ясни на всички. Единственият, който може би не сте виждали е %. Той връща остатъка от делението на 2 стойности. Например ако напишем:

  1. 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 израза:

  1. a = a+1;
  2. a += 1;
  3. a++;

са еквивалентни в тяхната функционалност. И трите увеличават стойността на променливата а с 1.

Характерно за този оператор е, че може да се използва като префикс(представка) и като суфикс(наставка). Това означава, че може да се напише както преди името на променливата (++a), така и след него (a++). Разликата между двата начина се проявява в по-сложни изрази с присвояване. Например:

  1. a = 12;
  2. b = a++;

След изпълнението на горния израз, стойността на a e 13, а на b e 12.

  1. a = 12;
  2. b = ++a;

След изпълнението на горния израз стойността на 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 и обратното. Пример:

  1. !true // връща False
  2. !false // връща True
  3. !(2 == 2) // връща False, защото израза (2 == 2) е верен и съответно отрицанието му е грешно
  4. !(2 == 4) // връща True

Забележете, че !(2 == 3) e еквивалентно на (2 != 3).

Логическите оператори && и || означават съответно логическото И и ИЛИ. Тоест когато ползваме && трябва и двете условия да са верни, за да върне резултат True, а когато използваме || е достатъчно само едно от условията да бъде вярно, така че целият израз да върне True. Пример:

  1. ( a && b ) // True, ако a == b == True, в противен случай False
  2. ( c || d ) // False, ако c == d == False, в противен случай True
  3. (2 == 2) || (1 > 10) // True (причината остава за упражнение)
  4. !(2 == 5) && !(5 > 8) // True (причината остава за упражнение)

 

Условен оператор

Условният оператор проверява дадено условие и в зависимост от това дали то е вярно, връща различни стойности. Структурата му е следната:

условие ? резултат_при_вярно_условие : резултат_при_грешно_условие

Пример:

  1. (5 > 10) ? „Yes“ : „No“ // връща „No“, защото 5 не е по-голямо от 10.
  2. (2 != 3) ? „Yes“ : „No“ // връща „Yes“, защото 2 не е равно на 3.
  3. (a < b) ? a : b // връща по-малката стойност

 

Разделителен оператор

Разделителният оператор ( , ) се използва за разделянето на два или повече израза, които са включени там, където се очаква само един. Например:

  1. 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)

Този оператор ни позволява да променяме типа данни на някои стойности. Например ако имаме число с плаваща запетая, но искаме да го присвоим към променлива от целочислен тип, можем да го направим по следния начин.

  1. int intPI;
  2. float PI = 3.14159265359;
  3. intPI = (int) PI;

След изпълнението на горния код, стойността в променливата intPI e 3.

Автор: Мартин Михайлов