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 |
Пример
Ознакомьтесь со следующими примерами, чтобы понять арифметические операторы, доступные в C++.
Скопируйте и вставьте следующую программу на C++ в файл test.cpp, скомпилируйте и запустите программу.
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - c 的值是 31 Line 2 - c 的值是 11 Line 3 - c 的值是 210 Line 4 - c 的值是 2 Line 5 - c 的值是 1 Line 6 - c 的值是 10 Line 7 - c 的值是 10
Операторы отношения
В следующей таблице показаны операторы отношения, поддерживаемые в C++.
Предположим, переменная A имеет значение 10, а переменная B — значение 20, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| == | Проверяет, равны ли значения двух операндов; если равны, условие истинно. | (A == B) не истинно. |
| != | Проверяет, равны ли значения двух операндов; если не равны, условие истинно. | (A != B) истинно. |
| > | Проверяет, больше ли значение левого операнда, чем значение правого операнда; если да, условие истинно. | (A > B) не истинно. |
| < | Проверяет, меньше ли значение левого операнда, чем значение правого операнда; если да, условие истинно. | (A < B) истинно. |
| >= | Проверяет, является ли значение левого операнда большим или равным значению правого операнда; если да, условие истинно. | (A >= B) не истинно. |
| <= | Проверяет, является ли значение левого операнда меньшим или равным значению правого операнда; если да, условие истинно. | (A <= B) истинно. |
Пример
Ознакомьтесь со следующими примерами, чтобы понять операторы сравнения, доступные в C++.
Скопируйте и вставьте следующую программу на C++ в файл test.cpp, скомпилируйте и запустите программу.
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - a 不等于 b Line 2 - a 不小于 b Line 3 - a 大于 b Line 4 - a 小于或等于 b Line 5 - b 大于或等于 a
Логические операторы
В следующей таблице показаны логические операторы, поддерживаемые C++.
Предположим, переменная A имеет значение 1, а переменная B имеет значение 0, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| && | Называется оператором логического И. Если оба операнда истинны, то условие истинно. | (A && B) ложно. |
| || | Называется оператором логического ИЛИ. Если хотя бы один из двух операндов истинен, то условие истинно. | (A || B) истинно. |
| ! | Называется оператором логического НЕ. Он используется для инвертирования логического состояния операнда. Если условие истинно, оператор логического НЕ сделает его ложным. | !(A && B) истинно. |
Пример
См. следующие примеры, чтобы понять логические операторы, доступные в C++.
Скопируйте и вставьте следующую программу на C++ в файл test.cpp, скомпилируйте и запустите программу.
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - 条件为真 Line 2 - 条件为真 Line 4 - 条件不为真 Line 5 - 条件为真
Побитовые операторы
Побитовые операторы работают с битами и выполняют операции побитово. Таблицы истинности для &, | и ^ выглядят следующим образом:
| 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, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| & | Побитовая операция AND. Выполняет операцию "AND" над двоичными битами. Правила операции: 0&0=0; 0&1=0; 1&0=0; 1&1=1; | (A & B) даёт 12, что равно 0000 1100. |
| | | Побитовый оператор OR. Выполняет операцию "OR" над двоичными битами. Правила операции: 0|0=0; 0|1=1; 1|0=1; 1|1=1; | (A | B) даёт 61, что равно 0011 1101. |
| ^ | Оператор XOR. Выполняет операцию "XOR" над двоичными битами. Правила операции: 0^0=0; 0^1=1; 1^0=1; 1^1=0; | (A ^ B) даёт 49, что равно 0011 0001. |
| ~ | Оператор побитового НЕ. Выполняет операцию "инверсии" над двоичными битами. Правила операции: ~1=-2; ~0=-1; | (~A) даст -61, то есть 1100 0011 — дополнительный код знакового двоичного числа. |
| << | Оператор двоичного сдвига влево. Сдвигает все двоичные биты операнда влево на заданное число позиций (крайние левые двоичные биты отбрасываются, а справа дописываются нули). | A << 2 даёт 240, что равно 1111 0000. |
| >> | Оператор двоичного сдвига вправо. Сдвигает все двоичные биты числа вправо на заданное число позиций. Для положительных чисел слева дописываются нули; для отрицательных чисел слева дописываются единицы; биты справа отбрасываются. | A >> 2 даёт 15, что равно 0000 1111. |
Пример
См. следующие примеры, чтобы понять побитовые операторы, доступные в C++.
Скопируйте и вставьте следующую программу на C++ в файл test.cpp, скомпилируйте и запустите программу.
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - c 的值是 12 Line 2 - c 的值是 61 Line 3 - c 的值是 49 Line 4 - c 的值是 -61 Line 5 - c 的值是 240 Line 6 - c 的值是 15
Операторы присваивания
В следующей таблице перечислены операторы присваивания, поддерживаемые C++:
| Операторы | Описание | Пример |
|---|---|---|
| = | Простой оператор присваивания. Присваивает значение правого операнда левому операнду. | C = A + B присвоит значение A + B переменной C. |
| += | Оператор присваивания сложения добавляет правый операнд к левому операнду и присваивает результат левому операнду. | 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++.
Скопируйте и вставьте следующую программу на C++ в файл test.cpp, скомпилируйте и запустите программу.
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Line 1 - = 运算符实例,c 的值 = 21 Line 2 - += 运算符实例,c 的值 = 42 Line 3 - -= 运算符实例,c 的值 = 21 Line 4 - *= 运算符实例,c 的值 = 441 Line 5 - /= 运算符实例,c 的值 = 21 Line 6 - %= 运算符实例,c 的值 = 11 Line 7 - <<= 运算符实例,c 的值 = 44 Line 8 - >>= 运算符实例,c 的值 = 11 Line 9 - &= 运算符实例,c 的值 = 2 Line 10 - ^= 运算符实例,c 的值 = 0 Line 11 - |= 运算符实例,c 的值 = 2
Прочие операторы
В следующей таблице перечислены некоторые другие важные операторы, поддерживаемые C++.
| Операторы | Описание |
|---|---|
| sizeof | оператор sizeofВозвращает размер переменной. Например, sizeof(a) вернёт 4, где a — целое число. |
| Условие ? X : Y | Условный операторЕсли условие истинно ? то значение — X : иначе значение — Y. |
| , | Оператор запятаяОн выполняет ряд операций последовательно. Значение всего выражения с запятой — это значение последнего выражения в списке, разделённом запятыми. |
| . (точка) и -> (стрелка) | Оператор доступа к членуИспользуется для обращения к членам классов, структур и объединений. |
| Приведение | Оператор приведенияПреобразует один тип данных в другой тип данных. Например, int(2.2000) вернёт 2. |
| & | Оператор указателя &Возвращает адрес переменной. Например, &a; даст фактический адрес переменной. |
| * | Оператор указателя *Указывает на переменную. Например, *var; будет указывать на переменную var. |
Приоритет операторов в C++
Приоритет операторов определяет группировку членов в выражении. Это влияет на то, как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие; например, операторы умножения и деления имеют более высокий приоритет, чем операторы сложения и вычитания.
Например, x = 7 + 3 * 2. Здесь x присваивается 13, а не 20, потому что оператор * имеет более высокий приоритет, чем +, поэтому сначала вычисляется умножение 3*2, а затем прибавляется 7.
В следующей таблице операторы перечислены в порядке приоритета от высокого к низкому. Операторы с более высоким приоритетом находятся в верхней части таблицы, а операторы с более низким приоритетом — в нижней. В выражении операторы с более высоким приоритетом вычисляются первыми.
| Категория | Операторы | Ассоциативность |
|---|---|---|
| Постфиксные | () [] -> . ++ - - | Слева направо |
| Унарные | + - ! ~ ++ - - (type)* & sizeof | Справа налево |
| Мультипликативные | * / % | Слева направо |
| Аддитивные | + - | Слева направо |
| Сдвиг | << >> | Слева направо |
| Связь | < <= > >= | Слева направо |
| Равенство | == != | Слева направо |
| Побитовое И | & | Слева направо |
| Побитовое XOR | ^ | Слева направо |
| Побитовое ИЛИ | | | Слева направо |
| Логическое И | && | Слева направо |
| Логическое ИЛИ | || | Слева направо |
| Условия | ?: | Справа налево |
| Присваивание | = += -= *= /= %=>>= <<= &= ^= |= | Справа налево |
| comma | , | Слева направо |
Пример
См. следующие примеры, чтобы понять приоритет операторов в C++.
Скопируйте и вставьте следующую программу на C++ в файл test.cpp, скомпилируйте и запустите программу.
Сравните разницу между наличием скобок и их отсутствием: это даст разные результаты. Поскольку (), /, * и + имеют разные уровни приоритета, операторы с более высоким приоритетом вычисляются первыми.
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
(a + b) * c / d 的值是 90 ((a + b) * c) / d 的值是 90 (a + b) * (c / d) 的值是 90 a + (b * c) / d 的值是 50Другие расширения