Полное руководство по операторам C++: типы, использование и лучшие практики
Оператор — символ, указывающий компилятору выполнить определённые математические или логические манипуляции. C++ богат встроенными операторами и предоставляет следующие типы:
- Арифметические операторы
- Операторы отношения
- Логические операторы
- Побитовые операторы
- Операторы присваивания
- Прочие операторы
Эта глава рассматривает каждый тип по отдельности.
Арифметические операторы
Поддерживаемые C++ арифметические операторы (пусть A = 10, B = 20):
| Оператор | Описание | Пример |
|---|---|---|
| + | Складывает два операнда | A + B = 30 |
| - | Вычитает второй операнд из первого | A - B = -10 |
| * | Умножает оба операнда | A * B = 200 |
| / | Делит числитель на знаменатель | B / A = 2 |
| % | Оператор остатка от целочисленного деления | B % A = 0 |
| ++ | Инкремент, увеличивает целое на 1 | A++ = 11 |
| -- | Декремент, уменьшает целое на 1 | A-- = 9 |
Операторы отношения
Поддерживаемые операторы отношения (A = 10, B = 20):
| Оператор | Описание | Пример |
|---|---|---|
| == | Проверяет равенство значений; если да, условие истинно | (A == B) ложно |
| != | Проверяет неравенство; если значения не равны, условие истинно | (A != B) истинно |
| > | Проверяет, больше ли левый операнд правого | (A > B) ложно |
| < | Проверяет, меньше ли левый операнд правого | (A < B) истинно |
| >= | Проверяет, больше или равно левый операнд правому | (A >= B) ложно |
| <= | Проверяет, меньше или равно левый операнд правому | (A <= B) истинно |
Логические операторы
Поддерживаемые логические операторы (A = 1, B = 0):
| Оператор | Описание | Пример |
|---|---|---|
| && | Логическое И. Если оба операнда ненулевые, условие истинно | (A && B) ложно |
| || | Логическое ИЛИ. Если любой операнд ненулевой, условие истинно | (A || B) истинно |
| ! | Логическое НЕ. Инвертирует логическое состояние операнда | !(A && B) истинно |
Побитовые операторы
Побитовые операторы работают с битами, выполняя операции побитово. Таблицы истинности для &, |, ^:
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
Пусть A = 60, B = 13. В двоичном виде:
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011
Побитовые операторы C++ (A = 60, B = 13):
| Оператор | Описание | Пример |
|---|---|---|
| & | Побитовое И: копирует бит, если он есть в обоих операндах | (A & B) = 12 (0000 1100) |
| | | Побитовое ИЛИ: копирует бит, если он есть в любом операнде | (A | B) = 61 (0011 1101) |
| ^ | Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ: копирует бит, если он установлен в одном операнде, но не в обоих | (A ^ B) = 49 (0011 0001) |
| ~ | Побитовое дополнение (унарный): «переворачивает» биты | (~A) = -61 (1100 0011 в доп. коде) |
| << | Сдвиг влево: значение левого операнда сдвигается влево на число бит правого операнда | A << 2 = 240 (1111 0000) |
| >> | Сдвиг вправо: значение левого операнда сдвигается вправо на число бит правого операнда | A >> 2 = 15 (0000 1111) |
Операторы присваивания
Поддерживаемые операторы присваивания:
| Оператор | Описание | Пример |
|---|---|---|
| = | Простое присваивание: присваивает значение правого операнда левому | C = A + B присваивает C значение A + B |
| += | Сложение с присваиванием: прибавляет правый операнд к левому и присваивает результат левому | C += A эквивалентно C = C + A |
| -= | Вычитание с присваиванием | C -= A эквивалентно C = C - A |
| *= | Умножение с присваиванием | C *= A эквивалентно C = C * A |
| /= | Деление с присваиванием | C /= A эквивалентно C = C / A |
| %= | Остаток с присваиванием | C %= A эквивалентно C = C % A |
| <<= | Сдвиг влево с присваиванием | C <<= 2 то же, что C = C << 2 |
| >>= | Сдвиг вправо с присваиванием | C >>= 2 то же, что C = C >> 2 |
| &= | Побитовое И с присваиванием | C &= 2 то же, что C = C & 2 |
| ^= | Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ с присваиванием | C ^= 2 то же, что C = C ^ 2 |
| |= | Побитовое ИЛИ с присваиванием | C |= 2 то же, что C = C | 2 |
Прочие операторы
Другие операторы, поддерживаемые C++:
| № | Оператор и описание |
|---|---|
| 1 | sizeof Возвращает размер переменной. Например, |
| 2 | Условие ? X : Y Условный оператор ( |
| 3 | , Оператор запятая: выполняет последовательность операций. Значение всего выражения — значение последнего выражения в списке. |
| 4 | . (точка) и -> (стрелка) Операторы доступа к членам классов, структур и объединений. |
| 5 | Cast Операторы приведения типов. Например, |
| 6 | & Оператор адреса: возвращает адрес переменной. |
| 7 | * Оператор разыменования: указатель на переменную. |
Приоритет операторов в C++
Приоритет определяет группировку термов в выражении и порядок вычисления. Некоторые операторы имеют более высокий приоритет; например, умножение выше сложения.
Пример: x = 7 + 3 * 2 — x получает 13, а не 20, потому что * имеет более высокий приоритет, чем +.
В таблице операторы с высшим приоритетом сверху, с низшим — снизу. В выражении операторы с более высоким приоритетом вычисляются первыми.
| Категория | Оператор | Ассоциативность |
|---|---|---|
| Постфикс | () [] -> . ++ -- | Слева направо |
| Унарный | + - ! ~ ++ -- (type)* & sizeof | Справа налево |
| Мультипликативный | * / % | Слева направо |
| Аддитивный | + - | Слева направо |
| Сдвиг | << >> | Слева направо |
| Отношения | < <= > >= | Слева направо |
| Равенство | == != | Слева направо |
| Побитовое И | & | Слева направо |
| Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ | ^ | Слева направо |
| Побитовое ИЛИ | | | Слева направо |
| Логическое И | && | Слева направо |
| Логическое ИЛИ | || | Слева направо |
| Условный | ?: | Справа налево |
| Присваивание | = += -= *= /= %= >>= <<= &= ^= |= | Справа налево |
| Запятая | , | Слева направо |
Язык C
- Операторы C# — исчерпывающее руководство по операторам в C#
- Понимание типов данных C++: основы, модификаторы и лучшие практики
- Освоение операторов C++: полное руководство с практическими примерами
- Комментарии в C++: лучшие практики для читаемого и поддерживаемого кода
- Шаблоны классов в C++: практическое руководство
- Операторы в C: исчерпывающее руководство
- Мастерство операторов Python: Полное руководство
- Освоение операторов Java: типы, синтаксис и практические примеры
- Операторы в C++: типы, примеры и практические программы
- Операторы в C: полное руководство по арифметическим, битовым, логическим и другим операторам