|
|
|
След като вече знаем за променливите и константите, може да започнем да работим с тях. За тази цел са направени операторите в C++. За разлика от другите езици, в които операторите са главно ключови думи, в C++ те са най-вече направени от знаци, които не са част от азбуката, но ги има на всички клавиатури. Това е голямо удобство защото е по-лесно за учене, а и кода става по-кратък. Не е нужно да запомняте всичкото съдържанието на този урок. Голяма част от него е написана за справка, когато имате нужда. Присвояване (=) Оператора за присвояване се използва за определяне стойност на променлива. a=5; Примера показва как променливата a присвоява целочислената стойност 5. Страната от ляво на оператора за присвояване (=) е известна като lvalue (лява стойност), а от дясно rvalue (дясна стойност). Lvalue трябва да бъде променлива, докато rvalue може да бъде променлива, константа, резултат от операция или комбинация от вече споменатите. Най-важното правило, което трябва да запомните е че присвояването става от дясно на ляво и никога в другата посока. a = b; В горния пример променливата а(lvalue) присвоява стойността на променливата b(rvalue). Стойността, която е била съхранявана до този момент в променливата a изобщо не играе роля в тази операция и всъщност тя вече е загубена. Също така имайте в предвид, че ние присвояваме стойността на променливата b в a само в момента на операцията за присвояване. Тоест по-нататъшни промени по стойността на променливата b няма да повлияят на стойността на a. Хайде сега до погледнем един следния код, като пример за казаното дотук. Сложил съм коментари, описващи развитието на променливите: // оператор за присвояване Изхода на програмата е: a:4 b:7 Привилегията на C++ пред другите програмни езици е че оператора за присвояване може да бъде използван като rvalue (или част от rvalue) за друго присвояване. Например: a = 2 + (b = 5); Горният пример е еквивалентен на: b = 5; Това означава, че първо променливата b присвоява 5, а след това a присвоява 2 плюс стойността на b(тоест 5), като a остава с крайна стойност 7. Следният израз също е валиден на C++: a = b = c = 5; В случая трите променливи a, b и c присвояват 5. Аритметични оператори ( +, -, *, /, % ) Петте аритметични оператора в C++ са: + // събиране - // изваждане * // умножение / // деление % // остатък Операторите за събиране, изваждане, умножение и деление трябва да са ви ясни. Единственият, който може би не сте виждали е %. Той връща остатъка от делението на 2 стойности. Например ако напишем: a = 11 % 3; Променливата a ще присвои 2 за стойност, защото 2 е остатъка от делението на 11 с 3. Сложни присвоявания (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=) Когато искаме да променим стойността на променлива чрез извършване на операция с текущата и стойност, можем да използваме така наречените оператори за сложно присвояване. Например: a += 2; Е същото като: a = a + 2; a -= 5; Е същото като: a = a - 5; a /= b; E същото като: a = a / b; цена *= брой + 1; Е същото като: цена = цена * (брой + 1); Същото е и за всички други оператори. Например: // оператори за сложно присвояване Увеличаване и намаляване (++, --) Някои изрази могат да се съкратят дори повече. Оператора за увеличаване (++) и оператора за намаляване (--) увеличават или съответно намаляват стойност на променлива с единица. Те са еквивалентни на +=1 и -=1. Следователно: c++; са еквивалентни в тяхната функционалност. И трите увеличават стойността на променливата c с 1. Характерно за този оператор е че може да се използва като префикс(представка) и като суфикс(наставка). Това означава, че може да се напише както преди името на променливата (++a), така и след него (a++). Въпреки, че в прости изрази като a++ или ++a и двете имат еднакво значение, в други изрази могат да проявят значителна разлика. Забележете разликата: Пример 1: B=3; Пример 2: B=3; Когато оператора е пред името на променливата, стойността и първо се увеличава с 1 и тогава се присвоява. Когато оператора е след името на променливата, стойността и първо се присвоява, а след това се увеличава. Оператори за сравняване ( ==, !=, >, <, >=, <= ) Операторите за сравняване сравняват две стойности и връщат булева стойност - true или false. Операторите, които можем да използваме в C++ са: == //Равно != //Не равно > //По-голямо < //По-малко >= //По-голямо или равно <= //По-малко или равно Ето и малко примери: (7 == 5) // FALSE Разбира се може да се използват и променливи в проверките. Да предположим, че а = 2, b = 3 и c = 6: (a == 5) // evaluates to false since a is not equal to 5. Бъдете внимателни! Не бъркайте оператора за присвояване (=), с оператора за сравняване (==). Логически оператори ( !, &&, || ) Оператора ! се използва в C++ за отрицание на булевите стойности. Тоест ако реалната стойност е TRUE, този оператор я превръща във FALSE и обратното. Пример: !(5 == 5) // FALSE защото израза (5 == 5) е верен Логическите оператори && и || означават съответно И и ИЛИ. Тоест когато ползваме && трябва и двете условия да са верни за да върне TRUE, а когато използваме || е достатъчно само едно от условията да бъде вярно така че целият израз да върне TRUE. Пример: ( (5 == 5) && (3 > 6) ) // FALSE ( true && false ) Условен оператор (?) Условният оператор проверява дадено условие и ако то е вярно връща стойност, ако е грешно, връща друга стойност. Структурата му е следната: условие ? резултат1 : резултат2 Ако условието е вярно, изразът ще върне резултат1, ако не е, ще върне резултат2. Пример: 7==5 ? 4 : 3 // връща 3, защото 7 не е равно на 5. // conditional operator В този пример a беше 2, а b 7, затова изразът (a>b) не е верен. Следователно целият израз връща втората стойност (тоест b със стойност 7) Разделителен оператор ( , ) Разделителният оператор ( , ) се използва за разделянето на два или повече израза, които са включени там където се очаква само един. Например: a = (b=3, b+2); Първо променливата b присвоява стойността 3, а след това a присвоява b+2 тоест 5. В крайна сметка b=3, а a=5 Побитови оператори ( &, |, ^, ~, <<, >> ) & - 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, а краят се загубва. Оператор за промяна на типа данни С този оператор може да променяте типа данни на някои променливи. Има няколко начина да направите това в C++. Най-лесният от тях, които е наследен от езика C, е да се поставя преди променливата новият тип в малки скоби (). int i; Горният пример конвертира десетичното число f(3.14), на целочислено (3). Друг начин да направим същото е като сложим променливата в скоби. i = int ( f ); И двата начина са валидни на C++. sizeof() Оператора sizeof() приема един параметър, които може да бъде или тип или променлива и връща големината му в байтове. a = sizeof (char); В примера a ще присвои 1, защото char е едно-байтов тип. Източник: www.cplusplus.com |
|
|
& - AND - Bitwise AND
| - OR - Bitwise Inclusive OR
^ - XOR - Bitwise Exclusive OR
~ - NOT - Unary complement (bit inversion)
<< - SHL - Shift Left
>> - SHR - Shift Right
Супер си