Операторы в C++: Врата в магию программирования

Здравствуйте, будущие кодировщики! Сегодня мы отправляемся в увлекательное путешествие в мир операторов C++. Не волнуйтесь, если вы еще ни разу не писали строку кода - я здесь, чтобы вести вас шаг за шагом, как я делал это для countless студентов на протяжении многих лет моей преподавательской деятельности. Так возьмите виртуальную палочку (клавиатуру) и давайте наведем的一些 программные заклинания!

C++ Operators

Что такое операторы?

Прежде чем мы углубимся, давайте поймем, что такое операторы. В C++ операторы - это особые символы, которые instruct компьют to выполнять конкретные математические или логические манипуляции. Представьте их как магические слова в вашей книге заклинаний - каждое из них делает что-то уникальное!

Арифметические операторы

Давайте начнем с азов - арифметических операторов. Они, возможно, знакомы вам с урока математики, но теперь мы будем использовать их, чтобы компьют делал вычисления за нас!

Вот таблица арифметических операторов в C++:

Оператор Описание Пример
+ Сложение a + b
- Вычитание a - b
* Умножение a * b
/ Деление a / b
% Остаток от деления a % b
++ Увеличение a++ или ++a
-- Уменьшение a-- или --a

Давайте увидим это в действии:

#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

cout << "a++ = " << a++ << endl;  // Вывод: 10
cout << "Теперь a = " << a << endl;  // Вывод: 11

cout << "++b = " << ++b << endl;  // Вывод: 4
cout << "Теперь b = " << b << endl;  // Вывод: 4

return 0;
}

В этом примере мы выполняем различные арифметические операции. Обратите внимание, что a++ выводит 10, но затем a становится 11? Это потому, что a++ - это постфиксное увеличение - оно использует значение, а затем его увеличивает. С другой стороны, ++b - это префиксное увеличение - оно сначала увеличивает значение, а затем использует его.

Реляционные операторы

Следующие, у нас есть реляционные операторы. Они используются для сравнения значений и возвращают либо true (1), либо false (0). Они как судьи в магическом поединке!

Вот таблица реляционных операторов:

Оператор Описание Пример
== Равно a == b
!= Не равно a != b
> Больше чем a > b
< Меньше чем a < b
>= Больше или равно a >= b
<= Меньше или равно a <= b

Давайте увидим их в действии:

#include <iostream>
using namespace std;

int main() {
int a = 10, b = 5;

cout << "a == b is " << (a == b) << endl;  // Вывод: 0 (ложь)
cout << "a != b is " << (a != b) << endl;  // Вывод: 1 (истина)
cout << "a > b is " << (a > b) << endl;    // Вывод: 1 (истина)
cout << "a < b is " << (a < b) << endl;    // Вывод: 0 (ложь)
cout << "a >= b is " << (a >= b) << endl;  // Вывод: 1 (истина)
cout << "a <= b is " << (a <= b) << endl;  // Вывод: 0 (ложь)

return 0;
}

В этом заклинании... то есть, программе, мы сравниваем a и b с использованием различных реляционных операторов. Помните, что в C++ true представляется как 1, а false как 0.

Логические операторы

Теперь добавим немного логики в нашу магию! Логические операторы используются для combine conditional statements.

Вот таблица логических операторов:

Оператор Описание Пример
&& Логическое И a && b
|| Логическое ИЛИ a || b
! Логическое НЕ !a

Давайте наведем заклинание с этими:

#include <iostream>
using namespace std;

int main() {
bool a = true, b = false;

cout << "a && b is " << (a && b) << endl;   // Вывод: 0 (ложь)
cout << "a || b is " << (a || b) << endl;   // Вывод: 1 (истина)
cout << "!a is " << (!a) << endl;           // Вывод: 0 (ложь)
cout << "!b is " << (!b) << endl;           // Вывод: 1 (истина)

return 0;
}

В этом магическом заклинании мы используем логические операторы для combine или否定 логические значения. && возвращает true только если оба операнда истинны, || возвращает true если хотя бы один операнд истинен, а !否定 логическое значение.

Битовые операторы

Теперь мы въезжаем вreich advanced magic - битовые операторы. Они работают с индивидуальными битами целочисленных значений. Они как микро-заклинания в мире программирования!

Вот таблица битовых операторов:

Оператор Описание Пример
& Битовое И a & b
| Битовое ИЛИ a | b
^ Битовое Исключающее ИЛИ a ^ b
~ Битовое НЕ ~a
<< Сдвиг влево a << n
>> Сдвиг вправо a >> n

Давайте увидим немного битовой магии:

#include <iostream>
using namespace std;

int main() {
unsigned int a = 60;  // 60 = 0011 1100 в двоичной системе
unsigned int b = 13;  // 13 = 0000 1101 в двоичной системе

cout << "a & b = " << (a & b) << endl;   // Вывод: 12 (0000 1100 в двоичной системе)
cout << "a | b = " << (a | b) << endl;   // Вывод: 61 (0011 1101 в двоичной системе)
cout << "a ^ b = " << (a ^ b) << endl;   // Вывод: 49 (0011 0001 в двоичной системе)
cout << "~a = " << (~a) << endl;         // Вывод: -61 (1100 0011 в двоичной системе)
cout << "a << 2 = " << (a << 2) << endl; // Вывод: 240 (1111 0000 в двоичной системе)
cout << "a >> 2 = " << (a >> 2) << endl; // Вывод: 15 (0000 1111 в двоичной системе)

return 0;
}

Это заклинание может показаться немного сложным,但它 выполняет операции на индивидуальных битах наших чисел. Например, & выполняет операцию И на каждой соответствующей паре битов, | выполняет операцию ИЛИ, и так далее. Операции сдвига << и >> перемещают все биты влево или вправо на указанное количество позиций.

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

Операторы присваивания используются для присваивания значений переменным. Они как перья, которые пишут в вашей книге заклинаний!

Вот таблица операторов присваивания:

Оператор Описание Пример
= Простое присваивание a = b
+= Добавление и присваивание a += b
-= Вычитание и присваивание a -= b
*= Умножение и присваивание a *= b
/= Деление и присваивание a /= b
%= Остаток от деления и присваивание a %= b
<<= Сдвиг влево и присваивание a <<= b
>>= Сдвиг вправо и присваивание a >>= b
&= Битовое И и присваивание a &= b
^= Битовое Исключающее ИЛИ и присваивание a ^= b
|= Битовое ИЛИ и присваивание a |= b

Давайте запишем的一些 значения в нашу книгу заклинаний:

#include <iostream>
using namespace cout;

int main() {
int a = 10;

cout << "Initial value of a: " << a << endl;

a += 5;  // Эквивалентно: a = a + 5
cout << "After a += 5: " << a << endl;

a -= 3;  // Эквивалентно: a = a - 3
cout << "After a -= 3: " << a << endl;

a *= 2;  // Эквивалентно: a = a * 2
cout << "After a *= 2: " << a << endl;

a /= 4;  // Эквивалентно: a = a / 4
cout << "After a /= 4: " << a << endl;

a %= 3;  // Эквивалентно: a = a % 3
cout << "After a %= 3: " << a << endl;

return 0;
}

В этом магическом скрипте мы используем различные операторы присваивания для изменения значения a. Эти операторы combine присваивание с другой операцией, делая наш код более кратким.

Прочие операторы

C++ также имеет несколько других операторов, которые не подходят в другие категории. Они как карты-джокеры в вашей колоде заклинаний!

Вот таблица дополнительных операторов:

Оператор Описание Пример
sizeof Возвращает размер переменной sizeof(a)
?: Троичный оператор condition ? expr1 : expr2
& Возвращает адрес переменной &a
* Указатель к переменной *ptr
. Доступ к членам структуры или объектов класса object.member
-> Доступ к членам структуры или класса через указатель ptr->member

Давайте увидим некоторые из них в действии:

#include <iostream>
using namespace cout;

int main() {
int a = 10;
int* ptr = &a;

cout << "Size of int: " << sizeof(int) << " bytes" << endl;
cout << "Value of a: " << a << endl;
cout << "Address of a: " << &a << endl;
cout << "Value pointed by ptr: " << *ptr << endl;

int b = (a > 5) ? 1 : 0;
cout << "b = " << b << endl;

return 0;
}

В этом магическом заклинании мы используем sizeof для получения размера целочисленной переменной, & для получения адреса a, * для д dereference указателя, и троичный оператор ?: как краткую форму if-else语句.

Приоритетность операторов в C++

Как и в математике, операторы в C++ имеют иерархию приоритетности. Это определяет порядок выполнения операций в выражении. Это как правила магического боя - некоторые заклинания имеют приоритет над другими!

Вот упрощенная таблица приоритетности операторов (от самого высокого до самого низкого):

Приоритет Оператор
1 ::
2 () [] -> . ++ --
3 ! ~ ++ -- + - * & (type) sizeof
4 * / %
5 + -
6 << >>
7 < <= > >=
8 == !=
9 &
10 ^
11 |
12 &&
13 ||
14 ?:
15 = += -= *= /= %= >>= <<= &= ^= |=
16 ,

Помните, что вы всегда можете использовать скобки, чтобы override умолчательный приоритет и specify порядок выполнения операций явно.

И вот оно, молодые маги! Вы только что completed ваш первый урок магии операторов в C++. Помните, что практика делает perfect, так что продолжайте cast эти кодовые заклинания, пока они не станут для вас second nature. Before you know it, вы будете создавать сложные программы с легкостью. Счастливого кодирования, и пусть ваши ошибки в компиляции будут few and far between!

Credits: Image by storyset