Потребителски панел
Запомни
Категории
C/C++ (17)
C# (8)
Java (5)
Visual Basic (18)
Delphi/Pascal (11)
Python (4)
Assembly (0)
Други (0)
Facebook
Оператори | Автор: admin | Дата: 17.10.2009


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

Не е нужно да запомняте всичкото съдържанието на този урок. Голяма част от него е написана за справка, когато имате нужда.

Присвояване (=)

Оператора за присвояване се използва за определяне стойност на променлива.
a=5;

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

В горния пример променливата а(lvalue) присвоява стойността на променливата b(rvalue). Стойността, която е била съхранявана до този момент в променливата a изобщо не играе роля в тази операция и всъщност тя вече е загубена.

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

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

#include <iostream>
using namespace std;

int main ()
{
int a, b; // a:?, b:?
a = 10; // a:10, b:?
b = 4; // a:10, b:4
a = b; // a:4, b:4
b = 7; // a:4, b:7

cout << "a:";
cout << a;
cout << " b:";
cout << b;

return 0;
}

Изхода на програмата е: a:4 b:7

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

Горният пример е еквивалентен на:
b = 5;
a = 2 + b;

Това означава, че първо променливата 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);

Същото е и за всички други оператори. Например:
// оператори за сложно присвояване

#include <iostream>
using namespace std;

int main ()
{
int a, b=3;
a = b;
a+=2; // същото като a=a+2
cout << a;
return 0;
}


Увеличаване и намаляване (++, --)

Някои изрази могат да се съкратят дори повече. Оператора за увеличаване (++) и оператора за намаляване (--) увеличават или съответно намаляват стойност на променлива с единица. Те са еквивалентни на +=1 и -=1. Следователно:
c++;
c+=1;
c=c+1;

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

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

Пример 1:
B=3;
A=++B;
// A съдържа 4, B съдържа 4

Пример 2:
B=3;
A=B++;
// A съдържа 3, B съдържа 4

Когато оператора е пред името на променливата, стойността и първо се увеличава с 1 и тогава се присвоява. Когато оператора е след името на променливата, стойността и първо се присвоява, а след това се увеличава.

Оператори за сравняване ( ==, !=, >, <, >=, <= )

Операторите за сравняване сравняват две стойности и връщат булева стойност - true или false. Операторите, които можем да използваме в C++ са:

== //Равно

!= //Не равно

> //По-голямо

< //По-малко

>= //По-голямо или равно

<= //По-малко или равно

Ето и малко примери:
(7 == 5)     // FALSE
(5 > 4) // TRUE
(3 != 2) // TRUE
(6 >= 6) // TRUE
(5 < 5) // FALSE

Разбира се може да се използват и променливи в проверките. Да предположим, че а = 2, b = 3 и c = 6:
(a == 5)     // evaluates to false since a is not equal to 5.
(a*b >= c) // TRUE защото (2*3 >= 6) е вярно
(b+4 > a*c) // FALSE защото (3+4 > 2*6) е грешно.
((b=2) == a) // TRUE

Бъдете внимателни! Не бъркайте оператора за присвояване (=), с оператора за сравняване (==).

Логически оператори ( !, &&, || )

Оператора ! се използва в C++ за отрицание на булевите стойности. Тоест ако реалната стойност е TRUE, този оператор я превръща във FALSE и обратното. Пример:
!(5 == 5)    // FALSE защото израза (5 == 5) е верен
!(6 <= 4) // TRUE защого (6 <= 4) е грешно
!true // FALSE
!false // TRUE

Логическите оператори && и || означават съответно И и ИЛИ. Тоест когато ползваме && трябва и двете условия да са верни за да върне TRUE, а когато използваме || е достатъчно само едно от условията да бъде вярно така че целият израз да върне TRUE. Пример:
( (5 == 5) && (3 > 6) )  // FALSE ( true && false )
( (5 == 5) || (3 > 6) ) // TRUE ( true || false ).


Условен оператор (?)

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

условие ? резултат1 : резултат2

Ако условието е вярно, изразът ще върне резултат1, ако не е, ще върне резултат2. Пример:
7==5 ? 4 : 3     // връща 3, защото 7 не е равно на 5.
7==5+2 ? 4 : 3 // връща 4, защото 7 е равно на 5+2.
5>3 ? a : b // връща стойността на a, защото 5 е по-голямо от 3.
a>b ? a : b // връща по-голямата стойност, или a или b.

// conditional operator

#include <iostream>
using namespace std;

int main ()
{
int a,b,c;

a=2;
b=7;
c = (a>b) ? a : b;

cout << c;

return 0;
}

В този пример 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;
float f = 3.14;
i = (int) f;

Горният пример конвертира десетичното число f(3.14), на целочислено (3). Друг начин да направим същото е като сложим променливата в скоби.
i = int ( f );

И двата начина са валидни на C++.

sizeof()

Оператора sizeof() приема един параметър, които може да бъде или тип или променлива и връща големината му в байтове.
a = sizeof (char);

В примера a ще присвои 1, защото char е едно-байтов тип.

Урока е преведен специално за Programming-bg.com . Моля не копирайте без моето съгласие!
Източник: www.cplusplus.com

           


Беше ли Ви от полза урокът?
да не




Искате да пишете коментари? Влезте от тук или се регистрирайте!



Коментари (4):

От Dani на 19.11.2009 в 12:36 часа

можели да дадеш примери с тези Побитови оператори
& - AND - Bitwise AND
| - OR - Bitwise Inclusive OR
^ - XOR - Bitwise Exclusive OR
~ - NOT - Unary complement (bit inversion)
<< - SHL - Shift Left
>> - SHR - Shift Right

От admin на 19.11.2009 в 20:36 часа

Хм, добра идея, ще редактирам урока като добавя пример за всеки по отделно smile

От Dani на 20.11.2009 в 15:03 часа

Благодаря !
Супер си smile

От programmer на 15.09.2010 в 16:54 часа

Добрече го има този урок защото си нямах на идея какво пиша в програмата :Ь