Помогни ни да направим Uroci.net по - богат! Добави урок

C++ част.3 (Изрази и оператори)

C++ » C++
fix3d   трудност:    видян: 62811


Глава 3: Изрази и оператори.


Съдържание на трета глава :

3.1. Какво представлява изразът?
3.2. Аритметични операции
3.3. Операции за равенство и отношение, логически операции
3.4. Оператор за присвояване
3.5. Оператори за увеличаване и намаляване с 1
3.6. Операторът sizeof
3.7. Аритметичен оператор if
3.8. Оператори за работа с битове
3.9. Приоритет
3.10. Преобразуване на типове
3.11. Оператори
3.12. Оператори за управление
3.14. Операторът switch
3.15. Операторът while
3.16. Операторът for
3.17. Операторът do
3.18. Операторът break
3.19. Операторът continue
3.20. Операторът goto


Типовете данни бяха разгледани в глава 2. Ние описахме предварително дефинираните типове данни, методите за дефиниране на нови типове данни, както и как да създаваме даннови обекти. В тази глава се разглеждат предварително дефинираните операции, които могат да бъдат използувани за обработване на данните. Тези операции включват набор от оператори, които ги организират и ръководят изпълнението на програмата. В глава 4 ще бъдат обсъдени функциите и механизма за дефиниране на потребителски набор от операции.

3.1. Какво представлява изразът?

Всеки израз обединява една или повече операции. Обектите, над които се прилагат операциите се наричат операнди. Операциите се записват чрез оператори. Например, В С++ проверката за равенство се осъществява от оператора “= =”. Операторите, които имат един операнд, се наричат унарни, докато операторите с два аргумента са бинарни. Операндите на бинарните оператори се делят на леви и десни. Някои оператори представят както унарни, така и бинарни операции. Например,

*ptr

е един унарен указателен оператор. Той връща стойността, съхранена в адреса на обекта ptr. Обаче,

var1 * var2

представя бинарния оператор умножение. Той изчислява произведението на операндите си var1 и var2.

За изчисляването на един израз се изпълнява една или повече операции за да бъде даден резултат. Изключвайки случая, когато е указано обратното, резултатът, връщан от израза е стойност за четене (rvalue). Типът на резултата на един израз се определя от типа на операндите му. Когато операндите имат различен тип се извършва преобразуване на типовете съобразно предварително дефиниран набор от правила. Раздел 3.10 разглежда подробно преобразуването на типовете.

Когато в един израз се срещат две или повече операции, той се нарича съставен. Редът за изпълнение на операциите се определя според приоритета и асоциативността им. (Това ще бъде разяснено след като разгледаме предварително дефинирания набор от операции).

Най-простата форма на израз се получава от единична литерална константа или променлива.
Т.е. “операнд” без операция. Резултатът е стойността за четене на операнда. Например,

3.14159

"melancholia" upperBound

Резултатът на 3.14159 е 3.14159. Типът му е double. Резултатът на “melancholia” e адреса в паметта на първия елемент на низа. Типът му е char*. Резултатът на upperBound е нейната стойност за четене (rvalue). Типът му се определя от дефиницията на променливата.

Следващите раздели разглеждат предварително дефинираните в С++ оператори, представени в удобен за изучаването им ред.


3.2. Аритметични операции

Операция
Функция
Използуване

Умножение
Expr * expr
/
деление
expr / expr

%
деление по модул
expr % expr

Събиране
Expr + expr

изваждане
Expr - expr


Таблица 3.1 Аритметични операции

Делението на цели числа дава цяло число. Ако частното има дробна част тя се отрязва. Например, и двата израза

21 / 6;
21 / 7;

дават като резултат 3.

Оператoрът за деление по модул (“%”) изчислява остатъка от делението на две стойности. Той може да се използува само с операнди от цял тип. Левият операнд на операторът деление по модул е делимото. Делителят е десният операнд на операцията. Двата операнда трябва да са от цял тип. Следват няколко примера на правилни и неправилни изрази, използуващи оператора за деление по модул:

3.14 % 3 // error: floating point operand
21 % 6 // ok: result is 3
21 % 7 // ok: result is 0

int i;
double f;

i % 2 // ok: non-zero result indicates i is odd
i % f // ok: floating point operand

В някои случаи изчисляването на аритметичен израз ще върне неправилен или недефиниран резултат. Това се отнася за аритметични изрази. Може да се дължи на самото естество на математическата операция - деление на нула, например, - или да зависи от компютъра - препълване. Например, в променлива от тип unsigned char могат да се записват стойности от 0 до 255. При следната операция за умножение на променливата от тип unsigned char се дава стойност 256.

unsigned char uc = 32;
int i = 8;
uc = i * uc; // overflow

За да се представи 256 са необходими 9 бита. Присвояването на 256 на uc предизвиква препълване на паметта, отделена за този тип данни. Истинската стойност, записана на мястото на uc, е недефинирана и ще бъде различна за различните машини.



Страници: 1 2 3 4 »

Сподели урока:



Коментари (1)

Zemoch на 18.01 2011 в 17:30ч.
Мнооого дълъг урок ! По полезно щеше да е да се направят 10тина теми от това вместо една наблъскана догоре.... Иначе полезно ама много хубаво( на едно място :) ) не е на хубаво !

Регистрирайте се, за да добавите коментар


Калдейта Ком ЕООД - © 2003-. Всички права запазени.
Препоръчваме: IT Новини