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

1. Операции и операнди

Всяка операция се прилага върху един или няколко операнда (или аргумента) и връща като резултат някаква стойност.

В зависимост от броя на операндите си, операциите се делят на такива с един операнд (едноаргументни), с два операнда (двуаргументни) и с три операнда (триаргументни).

За двуаргументните операции е общоприет инфиксният запис, при който знакът на операцията се поставя между двата операнда:

  <операнд ><знак_на_операцията > <операнд>

Пример за двуаргументни операции са събирането, изваждането , умножението и делението.

За едноаргументните операции имаме две възможности:

  • префиксен запис на операцията: <знак_на_операцията> <операнд>
  • постфиксен запис на операцията: <операнд> <знак_на_операцията>
  • функционален запис – операцията sizeof (<тип>) – определя броя на байтовете, които заема стойност от някакъв тип в оперативната памет

2. Оператори в С#

а) същност
  • Във всички езици за програмиране се използват оператори, чрез които се извършват някакви действия върху данните.
  • Операторите позволят обработка на примитивни типове данни и обекти. Те приемат като вход един или няколко операнда и връщат като резултат някаква стойност.
  • Операторите в C# представляват специални символи (като например “+”, “.”, “^” и други) и извършат специфични преобразувания над един, два или три операнда.
б) Категории оператори в C#
  • Аритметични – също както в математиката, служат за извършване на прости математически операции.
  • Оператори за присвояване – позволяват присвояването на стойност на променливите.
  • Оператори за сравнение – дават възможност за сравнение на два литерала и/или променливи.
  • Логически оператори – оператори за работа с булеви типове данни и булеви изрази.
  • Побитови оператори – използват се за извършване на операции върху двоичното представяне на числови данни.
  • Оператори за преобразуване на типовете – позволяват преобразуването на данни от един тип в друг.
Категория Оператори
аритметични -, +, *, /, %, ++,
логически &&, ||, !, ^
побитови &, |, ^, ~, <<, >>
за сравнение ==, !=, >, <, >=, <=
за присвояване =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>=
съединяване на символни низове +
за работа с типове (type), as, is, typeof, sizeof
други ., new, (), [], ?:, ??

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

а) Синтаксис на оператора за присвояване
<променлива> = <израз> ;
където:
<израз> е константа, променлива или израз от типа на променливата
б) семантика на оператора за присвояване
Пресмята се изразът отдясно на знака за присвояване и стой­ността му се присвоява на променливата отляво на знака.
в) особености
Типът на израза трябва да съответства на типа на променливата. Правилото е следното:
Ако пресметнатата стойност на израза е от същия или по-слаб тип от типа на променливата вляво, тогава операторът е допустим.
Ако променливата вляво е от по-слаб тип или двата типа са несъвместими, операторът се счита за неправилен.
Примери:
int x = 6;
string helloString = “Здравей стринг.”;
int y = x;

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

Операция Оператор Тип на аргументите Тип на резултата Пример
Събиране + Целочислени или реални Съвпада с типа на аргументите 5+5=10
Изваждане Целочислени или реални Съвпада с типа на аргументите 10-5=5
Умножение * Целочислени или реални Съвпада с типа на аргументите 2*5=10
Целочислено деление / Целочислен тип Целочислен тип 7 / 3 = 2
Реално деление / Реален тип Реален тип 5.0 / 2 = 2.5
Остатък от целочислено деление % Целочислен тип Целочислен тип 7 % 3 = 1
-10 % 2 = 0
Инкрементиране(Increment) ++ Целочислен тип Целочислен тип ++ХХ++
Декрементиране(decrement) Целочислен тип Целочислен тип — ХХ —

6. Авmоuнkременmна u aвmoдekpeмeнmнa оnерацuя

а) Едноаргументна автоинкрементна операция – означава се със знак ++

Аргумент на операцията може да бъде само целочислена променлива. Операцията е в два варианта – постфиксен а++ и префиксен ++а.
– когато операцията се използва самостоятелно в оператор
а ++;  и ++а; са еквивалентни на оператора за присвояване а = а + 1;

– инкрементиране, включено в израз
Когато операцията е включена в израз, например а++ + Ь или ++а + Ь, тогава разликата между префиксната и постфикс­ната форма е съществена.
В префиксната форма първо се изпълнява присвояването а = а + 1 и полу­чената стойност на а участва в пресмятането на израза.
Например,
а = 2;
b = 3;
с = ++а + b; // След присвояването стойността на а ще бъде 3, а стойността на с ще бъде 6.

При постфиксната форма текущата стойност на а участва в пресмятането на израза, а след това се изпълнява присвояването а = а + 1.
а = 2;
b = 3;
с = а++ + b;  // След присвояването с = а++ + b стойността на с ще бъде 5, а стойността на а ще бъде 3.

б) Едноаргументна автодекрементна операция – означава се със знак   – –

7. Логически оператори

Логическите оператори приемат булеви стойности и връщат булев резултат (true или false). Основните булеви оператори са “И” (&&), “ИЛИ” (||), изключващо “ИЛИ” (^) и логическо отрицание (!).
Таблица с логическите оператори в C# и операциите , които те извършват:

x

y !x x && y x || y x ^ y
true true false true true false
true false false false true true
false true true false true true
false false true false false

false

8. Побитови оператори

Действието на побитовите оператори над двоичните цифри 0 и 1 е показано в следната таблица:

x y ~x x & y x | y x ^ y
1 1 0 1 1 0
1 0 0 0 1 1
0 1 1 0 1 1
0 0 1 0 0 0

Както виждаме, побитовите и логическите оператори си приличат много. Разликата в изписването на “И” и “ИЛИ” е че при логическите оператори се пише двоен амперсанд (&&) и двойна вертикална черта (||), а при битовите – единични (& и |). Побитовият и логическият оператор за изключващо или е един и същ “^”. За логическо отрицание се използва “!”, докато за побитово отрицание (инвертиране) се използва “~”.
побитовото изместване в ляво (<<) побитовото изместване в дясно (>>)

byte a = 3;             // 0000 0011 = 3
byte b = 5;            // 0000 0101 = 5

Console.WriteLine(a | b); // 0000 0111 = 7
Console.WriteLine(a & b); // 0000 0001 = 1
Console.WriteLine(a ^ b); // 0000 0110 = 6

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

а) Конкатенация (слепване на низове)

Операторът + се използва за съединяване на символни низове (string). Той слепва два или повече низа и връща резултата като нов низ. Ако поне един от аргументите в израза е от тип string, и има други операнди, които не са от тип string, то те автоматично ще бъдат преобразувани към тип string.

б) Оператор за съединяване на низове – пример

string csharp = “C#”;

string dotnet = “.NET“;

string csharpDotNet = csharp + dotnet;

Console.WriteLine(csharpDotNet);  // C#.NET

string csharpDotNet4 = csharpDotNet + ” ” + 4;

Console.WriteLine(csharpDotNet4);  // C#.NET 4

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

Операторите за сравнение в C# се използват за сравняване на два или повече операнди. C# поддържа следните оператори за сравнение:

  • по-голямо (>)
  • по-малко (<)
  • по-голямо или равно (>=)
  • по-малко или равно (<=)
  • равенство (==)
  • различие (!=)

Всички оператори за сравнение в C# са двуаргументни (приемат два операнда), а върнатият от тях резултат е булев (true или false). Операторите за сравнение имат по-малък приоритет от аритметичните, но са с по-голям приоритет от операторите за присвояване на стойност.

11. Изрази. Приоритет и асоциативност  

а) Аритметичен израз

Аритметичен израз e  последователност от константи, променливи и аритметични оператори. На всеки аритметичен израз еднозначно се съпоставя число, което наричаме стойност на израза.

б) Приоритет и асоциативност на операциите

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

За да се опрости изписването на изразите, се въвеждат допълнителни правила, като приоритет и асоциативност на операциите:

  • приоритет на всяка операция се определя приоритет, като между две операции с различни приоритети по­ рано се изпълнява тази с по-висок приоритет;
  • асоциативност за множество от операции с еднакъв приоритет се определя асоциативност – реда в който се изпълняват – от ляво на дясно или от дясно на ляво. Когото в израза имаме няколко операции с еднакъв приоритет, те се изпъл­няват от ляво надясно или от дясно наляво, в зависимост от асоциативността им.
Приоритет Операция Асоциативност
най-висок…………… 

 

 

 

 

 

 

 

 

най-нисък

х .Y, f( x ), а[х ] ,х++,х – -, new, typeof (.х) , checked, u nchecked, -> отляво надясно
++ x, -х, +е, -е, !е, е, ( t)x, &t, sizeof (t), tr ue, f alse отляво надясно
*, /, % отляво надясно
s, + s, отляво надясно
+, отляво надясно
< < , >> отляво надясно
< , >. < = , >=, is, as отляво надясно
==, != отляво надясно
& отляво надясно
^ отляво надясно
| отляво надясно
&& отляво надясно
|| отляво надясно
е?е: е отляво надясно
=, *=, /=, %=, +=, =, < < =, >>=, &=, ^=, |=, ? ? отдясно наляво

 

 

Comments are closed