Операторы и выражения

Глава 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);

Таблица логических операций #

ABA && BA || B!A
truetruetruetruefalse
truefalsefalsetruefalse
falsetruefalsetruetrue
falsefalsefalsefalsetrue

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++. Практикуйтесь и экспериментируйте с различными операторами, чтобы глубже изучить их особенности.