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, скомпилируйте и запустите программу.

Пример

#include <iostream> using namespace std; int main() { int a = 21; int b = 10; int c; c = a + b; cout << "Строка 1 - значение c равно" << c << endl ; c = a - b; cout << "Строка 2 - значение c равно" << c << endl ; c = a * b; cout << "Строка 3 - значение c равно" << c << endl ; c = a / b; cout << "Строка 4 - значение c равно" << c << endl ; c = a % b; cout << "Строка 5 - значение c равно" << c << endl ; int d = 10; // Проверка инкремента и декремента c = d++; cout << "Строка 6 - значение c равно" << c << endl ; d = 10; // Переназначить c = d--; cout << "Строка 7 - значение c равно" << c << endl ; return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

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, скомпилируйте и запустите программу.

Пример

#include <iostream> using namespace std; int main() { int a = 21; int b = 10; int c ; if( a == b ) { cout << "Строка 1 - a равно b" << endl ; } else { cout << "Строка 1 - a не равно b" << endl ; } if ( a < b ) { cout << "Строка 2 - a меньше b" << endl ; } else { cout << "Строка 2 - a не меньше b" << endl ; } if ( a > b ) { cout << "Строка 3 - a больше b" << endl ; } else { cout << "Строка 3 - a не больше b" << endl ; } /*Измените значения a и b*/ a = 5; b = 20; if ( a <= b ) { cout << "Строка 4 - a меньше или равно b" << endl ; } if ( b >= a ) { cout << "Строка 5 - b больше или равно a" << endl ; } return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

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, скомпилируйте и запустите программу.

Пример

#include <iostream> using namespace std; int main() { int a = 5; int b = 20; int c ; if ( a && b ) { cout << "Строка 1 - Условие истинно"<< endl ; } if ( a || b ) { cout << "Строка 2 - условие истинно"<< endl ; } /*Измените значения a и b*/ a = 0; b = 10; if ( a && b ) { cout << "Строка 3 - условие истинно"<< endl ; } else { cout << "Строка 4 - условие не истинно"<< endl ; } if ( !(a && b) ) { cout << "Строка 5 - условие истинно"<< endl ; } return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

Line 1 - 条件为真
Line 2 - 条件为真
Line 4 - 条件不为真
Line 5 - 条件为真

Побитовые операторы

Побитовые операторы работают с битами и выполняют операции побитово. Таблицы истинности для &, | и ^ выглядят следующим образом:

pqp & qp | qp ^ q
00000
01011
11110
10011

Предположим, 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, скомпилируйте и запустите программу.

Пример

#include <iostream> using namespace std; int main() { unsigned int a = 60; // 60 = 0011 1100 unsigned int b = 13; // 13 = 0000 1101 int c = 0; c = a & b; // 12 = 0000 1100 cout << "Строка 1 — значение c равно" << c << endl ; c = a | b; // 61 = 0011 1101 cout << "Строка 2 — значение c равно" << c << endl ; c = a ^ b; // 49 = 0011 0001 cout << "Строка 3 — значение c равно" << c << endl ; c = ~a; // -61 = 1100 0011 cout << "Строка 4 — значение c равно" << c << endl ; c = a << 2; // 240 = 1111 0000 cout << "Строка 5 — значение c равно" << c << endl ; c = a >> 2; // 15 = 0000 1111 cout << "Строка 6 — значение c равно" << c << endl ; return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

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, скомпилируйте и запустите программу.

Пример

#include <iostream> using namespace std; int main() { int a = 21; int c ; c = a; cout << "Строка 1 - пример оператора =, значение c = :" <<c<< endl ; c += a; cout << "Строка 2 - пример оператора +=, значение c = :" <<c<< endl ; c -= a; cout << "Строка 3 - пример оператора -=, значение c = :" <<c<< endl ; c *= a; cout << "Строка 4 - пример оператора *=, значение c = :" <<c<< endl ; c /= a; cout << "Строка 5 - пример оператора /=, значение c = :" <<c<< endl ; c = 200; c %= a; cout << "Строка 6 - пример оператора %=, значение c = :" <<c<< endl ; c <<= 2; cout << "Строка 7 - пример оператора <<=, значение c = :" <<c<< endl ; c >>= 2; cout << "Строка 8 - пример оператора >>=, значение c = :" <<c<< endl ; c &= 2; cout << "Строка 9 — пример оператора &=, значение c = :" <<c<< endl ; c ^= 2; cout << "Строка 10 — пример оператора ^=, значение c = :" <<c<< endl ; c |= 2; cout << "Строка 11 — пример оператора |=, значение c = :" <<c<< endl ; return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

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, скомпилируйте и запустите программу.

Сравните разницу между наличием скобок и их отсутствием: это даст разные результаты. Поскольку (), /, * и + имеют разные уровни приоритета, операторы с более высоким приоритетом вычисляются первыми.

Пример

#include <iostream> using namespace std; int main() { int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * c / d; // ( 30 * 15 ) / 5 cout << "Значение (a + b) * c / d равно" << e << endl ; e = ((a + b) * c) / d; // (30 * 15 ) / 5 cout << "Значение ((a + b) * c) / d равно" << e << endl ; e = (a + b) * (c / d); // (30) * (15/5) cout << "Значение (a + b) * (c / d) равно" << e << endl ; e = a + (b * c) / d; // 20 + (150/5) cout << "Значение a + (b * c) / d равно" << e << endl ; return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50
Другие расширения