Лого на 91. НЕГ „Проф. Константин Гълъбов“

Модул 1 · Урок 4

Операции и оператори

Аритметични, релационни, логически и присвояващи оператори. Приоритет на операциите и често срещани грешки.

Операторите — глаголите на езика

Ако променливите са „съществителните", то операторите са „глаголите" — те правят нещо със стойностите. Делим ги основно на:

  • Аритметични — смятат: + − * / %
  • Релационни — сравняват: < > <= >= == !=
  • Логически — комбинират истини/лъжи: && || !
  • Присвояващи — слагат стойност: = += −= *= /=

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

ОператорКакво правиПримерРезултат
+Събиране5 + 38
Изваждане10 − 46
*Умножение6 * 742
/Деление20 / 45
%Остатък (модул)17 % 52

Операторът % — остатък при деление

% връща остатъка след целочислено деление. Много полезен е за проверки като „четно ли е числото":

Console.WriteLine(17 % 5);   // 2  (17 = 3·5 + 2)
Console.WriteLine(20 % 4);   // 0  (дели се точно)
Console.WriteLine(7 % 2);    // 1  (нечетно)
Console.WriteLine(6 % 2);    // 0  (четно)

Съвет

n % 2 == 0 — числото е четно. Запомни този трик, ще го ползваш много.

Унарни оператори: ++ и --

Увеличават или намаляват стойност с 1:

int x = 5;
x++;            // x вече е 6 (същото като x = x + 1)
x--;            // x вече е 5 отново
int y = ++x;    // x става 6, после y = 6
int z = x++;    // z = 6, после x става 7

Префикс срещу постфикс

++x първо увеличава, после връща новата стойност. x++ първо връща старата стойност, после увеличава. За начало ползвай ги само като самостоятелен израз, за да не се объркаш.

Присвояващи оператори

= е „присвоявам стойност", не „равно". За проверка за равенство ползваме ==.

КраткоДългоПример
x += 3x = x + 3ако x = 5 → x = 8
x −= 2x = x − 2ако x = 5 → x = 3
x *= 4x = x * 4ако x = 5 → x = 20
x /= 2x = x / 2ако x = 10 → x = 5
x %= 3x = x % 3ако x = 10 → x = 1

Релационни оператори (сравнения)

Връщат винаги booltrue или false.

ОператорЗначениеПримерРезултат
==Равно ли е5 == 5true
!=Различно ли е5 != 3true
<По-малко3 < 5true
>По-голямо3 > 5false
<=По-малко или равно5 <= 5true
>=По-голямо или равно5 >= 6false

Класическа грешка

= присвоява, == сравнява! В C# късметно тук компилаторът обикновено ще откаже да компилира, ако объркаш двете в условие — но в други езици това е чест източник на бъгове.

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

Работят с булеви стойности (true / false).

ОператорИмеВръща true когато…Пример
&&И (AND)и двете са true(5 > 3) && (2 < 4) → true
||ИЛИ (OR)поне едното е true(5 > 10) || (2 < 4) → true
!НЕ (NOT)обръща стойността!(5 > 3) → false

Таблица на истинност

ABA && BA || B!A
falsefalsefalsefalsetrue
falsetruefalsetruetrue
truefalsefalsetruefalse
truetruetruetruefalse
int age = 17;
bool hasID = true;

bool canVote = age >= 18;                // false
bool canEnter = age >= 16 && hasID;      // true
bool isMinor = !(age >= 18);             // true

Приоритет на операциите

Когато в един израз има няколко оператора, C# ги изпълнява в строго определен ред. Това е същото като в математиката, но има още няколко правила:

( ) скобинай-висок! (отрицание), - (унарен минус)* / %умножение, деление+ −събиране, изваждане< <= > >= == !=сравнения&&логическо И||логическо ИЛИ — най-нисък
Фиг. 1 — Приоритет от най-висок (горе) към най-нисък (долу)
int result = 2 + 3 * 4;           // 14, не 20 (умножението първо)
int result2 = (2 + 3) * 4;        // 20 (скобите печелят)

bool ok = 5 > 3 && 2 < 1;         // false (and се прилага накрая)
bool ok2 = (5 > 3) || (2 > 10);   // true

Правило за оцеляване

Ако не си сигурен в приоритета — сложи скоби. Кодът става по-четим, а резултатът — еднозначен.

Конкатенация на низове

Операторът + над низове ги залепва:

string name = "Мария";
string greeting = "Здравей, " + name + "!";
// "Здравей, Мария!"

int age = 17;
string info = name + " е на " + age + " години.";
// числото автоматично се превръща в текст

По-чисто с интерполация

Вместо да залепваш с +, ползвай $"...":

string info = $"{name} е на {age} години.";

Чести грешки

  • Целочислено деление: 5 / 2 == 2, не 2.5. Решение: направи поне един операнд double.
  • Объркване на = и ==.
  • Сравнение на низове с == работи в C#, но в други езици може да не — в C# е „безопасно".
  • Закръгляне с каст: (int)3.7 == 3, не 4! За закръгляне ползвай Math.Round(3.7).

Полезни математически функции

В System.Math има готови функции:

Math.Abs(-5);          // 5  (абсолютна стойност)
Math.Max(3, 7);        // 7
Math.Min(3, 7);        // 3
Math.Pow(2, 10);       // 1024  (2 на 10-та)
Math.Sqrt(16);         // 4  (корен квадратен)
Math.Round(3.5);       // 4  (закръгляне)
Math.Floor(3.9);       // 3  (надолу)
Math.Ceiling(3.1);     // 4  (нагоре)
Math.PI;               // 3.14159...

Какво трябва да запомниш

  • % е остатък при деление — идеално за „четно ли е".
  • = присвоява, == сравнява.
  • Логически: && (и), || (или), ! (не).
  • При несигурност за приоритет — сложи скоби.
  • За форматиране на текст с променливи — интерполация $"{x}".