Операторы в C++: Врата в магию программирования
Здравствуйте, будущие кодировщики! Сегодня мы отправляемся в увлекательное путешествие в мир операторов C++. Не волнуйтесь, если вы еще ни разу не писали строку кода - я здесь, чтобы вести вас шаг за шагом, как я делал это для countless студентов на протяжении многих лет моей преподавательской деятельности. Так возьмите виртуальную палочку (клавиатуру) и давайте наведем的一些 программные заклинания!
Что такое операторы?
Прежде чем мы углубимся, давайте поймем, что такое операторы. В 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