Операторите — глаголите на езика
Ако променливите са „съществителните", то операторите са „глаголите" — те правят нещо със стойностите. Делим ги основно на:
- Аритметични — смятат:
+ − * / % - Релационни — сравняват:
< > <= >= == != - Логически — комбинират истини/лъжи:
&& || ! - Присвояващи — слагат стойност:
= += −= *= /=
Аритметични оператори
| Оператор | Какво прави | Пример | Резултат |
|---|---|---|---|
| + | Събиране | 5 + 3 | 8 |
| − | Изваждане | 10 − 4 | 6 |
| * | Умножение | 6 * 7 | 42 |
| / | Деление | 20 / 4 | 5 |
| % | Остатък (модул) | 17 % 5 | 2 |
Операторът % — остатък при деление
% връща остатъка след целочислено деление. Много полезен е за проверки като „четно ли е числото":
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 += 3 | x = x + 3 | ако x = 5 → x = 8 |
| x −= 2 | x = x − 2 | ако x = 5 → x = 3 |
| x *= 4 | x = x * 4 | ако x = 5 → x = 20 |
| x /= 2 | x = x / 2 | ако x = 10 → x = 5 |
| x %= 3 | x = x % 3 | ако x = 10 → x = 1 |
Релационни оператори (сравнения)
Връщат винаги bool — true или false.
| Оператор | Значение | Пример | Резултат |
|---|---|---|---|
| == | Равно ли е | 5 == 5 | true |
| != | Различно ли е | 5 != 3 | true |
| < | По-малко | 3 < 5 | true |
| > | По-голямо | 3 > 5 | false |
| <= | По-малко или равно | 5 <= 5 | true |
| >= | По-голямо или равно | 5 >= 6 | false |
Класическа грешка
= присвоява, == сравнява! В C# късметно тук компилаторът обикновено ще откаже да компилира, ако объркаш двете в условие — но в други езици това е чест източник на бъгове.
Логически оператори
Работят с булеви стойности (true / false).
| Оператор | Име | Връща true когато… | Пример |
|---|---|---|---|
| && | И (AND) | и двете са true | (5 > 3) && (2 < 4) → true |
| || | ИЛИ (OR) | поне едното е true | (5 > 10) || (2 < 4) → true |
| ! | НЕ (NOT) | обръща стойността | !(5 > 3) → false |
Таблица на истинност
| A | B | A && B | A || B | !A |
|---|---|---|---|---|
| false | false | false | false | true |
| false | true | false | true | true |
| true | false | false | true | false |
| true | true | true | true | false |
int age = 17;
bool hasID = true;
bool canVote = age >= 18; // false
bool canEnter = age >= 16 && hasID; // true
bool isMinor = !(age >= 18); // trueПриоритет на операциите
Когато в един израз има няколко оператора, C# ги изпълнява в строго определен ред. Това е същото като в математиката, но има още няколко правила:
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}".