Глава 2. Основы языка #
2.2 Операторы и выражения #
1. Арифметические операторы #
Арифметические операторы используются для выполнения математических операций:
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 3;
// Сложение
cout << "a + b = " << (a + b) << endl; // 13
// Вычитание
cout << "a - b = " << (a - b) << endl; // 7
// Умножение
cout << "a * b = " << (a * b) << endl; // 30
// Деление
cout << "a / b = " << (a / b) << endl; // 3 (целочисленное деление)
// Остаток от деления (модуль)
cout << "a % b = " << (a % b) << endl; // 1
// Унарный плюс и минус
int c = -a; // c будет равно -10
int d = +b; // d будет равно 3
return 0;
}
Особенности арифметических операторов: #
/
для целых чисел выполняет целочисленное деление%
работает только с целыми числами- Унарный
+
практически не меняет значение - Унарный
-
меняет знак числа
2. Операторы сравнения #
Операторы сравнения возвращают логическое значение (true
или false
):
int x = 5, y = 10;
bool result1 = (x == y); // Равенство
bool result2 = (x != y); // Неравенство
bool result3 = (x < y); // Меньше
bool result4 = (x > y); // Больше
bool result5 = (x <= y); // Меньше или равно
bool result6 = (x >= y); // Больше или равно
cout << boolalpha; // Вывод true/false вместо 1/0
cout << "x == y: " << result1 << endl;
cout << "x != y: " << result2 << endl;
3. Логические операторы #
Логические операторы работают с булевыми значениями:
bool a = true, b = false;
// Логическое И
bool and_result = a && b; // false
// Логическое ИЛИ
bool or_result = a || b; // true
// Логическое отрицание
bool not_result = !a; // false
// Практический пример
int age = 25;
bool is_adult = (age >= 18) && (age < 65);
Таблица логических операций #
A | B | A && B | A || B | !A |
---|---|---|---|---|
true | true | true | true | false |
true | false | false | true | false |
false | true | false | true | true |
false | false | false | false | true |
4. Побитовые операторы #
Работают непосредственно с битами числа:
unsigned int a = 5; // 0101 в двоичной системе
unsigned int b = 3; // 0011 в двоичной системе
// Побитовое И
unsigned int and_bit = a & b; // 0001 (1 в десятичной)
// Побитовое ИЛИ
unsigned int or_bit = a | b; // 0111 (7 в десятичной)
// Побитовое исключающее ИЛИ
unsigned int xor_bit = a ^ b; // 0110 (6 в десятичной)
// Побитовый сдвиг влево
unsigned int left_shift = a << 1; // 1010 (10 в десятичной)
// Побитовый сдвиг вправо
unsigned int right_shift = a >> 1; // 0010 (2 в десятичной)
// Побитовое отрицание
unsigned int not_bit = ~a;
5. Операторы присваивания #
int x = 10; // Простое присваивание
// Составные операторы присваивания
x += 5; // Эквивалентно x = x + 5
x -= 3; // Эквивалентно x = x - 3
x *= 2; // Эквивалентно x = x * 2
x /= 2; // Эквивалентно x = x / 2
x %= 3; // Эквивалентно x = x % 3
// Операторы инкремента и декремента
int y = 5;
y++; // Постфиксный инкремент (сначала использует, потом увеличивает)
++y; // Префиксный инкремент (сначала увеличивает, потом использует)
y--; // Постфиксный декремент
--y; // Префиксный декремент
6. Приоритет операторов #
Приоритет | Оператор | Описание | Ассоциативность |
---|---|---|---|
1 | :: | Разрешение области видимости | Слева направо |
2 | () [] . -> | Вызов функции, индексация, доступ к членам | Слева направо |
3 | ! ~ ++ -- + - * & | Унарные операторы | Справа налево |
4 | * / % | Арифметические | Слева направо |
5 | + - | Арифметические | Слева направо |
6 | << >> | Побитовый сдвиг | Слева направо |
7 | < <= > >= | Сравнение | Слева направо |
8 | == != | Равенство | Слева направо |
9 | & | Побитовое И | Слева направо |
10 | ^ | Побитовое исключающее ИЛИ | Слева направо |
11 | | | Побитовое ИЛИ | Слева направо |
12 | && | Логическое И | Слева направо |
13 | || | Логическое ИЛИ | Слева направо |
14 | ?: | Условный оператор | Справа налево |
15 | = += -= *= /= | Присваивание | Справа налево |
16 | , | Оператор запятая | Слева направо |
Практический пример использования приоритета операторов #
int result = 10 + 5 * 2; // result = 20, умножение выполняется первым
int complex = (10 + 5) * 2; // result = 30, скобки меняют приоритет
Заключение #
Понимание операторов и их приоритета критично для написания правильного и эффективного кода на C++. Практикуйтесь и экспериментируйте с различными операторами, чтобы глубже изучить их особенности.