3.02. Операторы в C++.md
Теперь, когда вы умеете создавать переменные и хранить в них данные, пора научиться с этими данными работать! Для этого в C++
существуют операторы — специальные символы, которые выполняют различные действия: складывают числа, сравнивают значения или объединяют логические условия. В этом параграфе вы узнаете, как использовать основные операторы, чтобы заставить Рудирон
выполнять осмысленные действия: считать шаги робота, проверять показания датчика или принимать решения. Давайте разберёмся, как это работает!
Оператор присваивания (=
)
Это самый первый и самый важный оператор, с которым вы столкнётесь. Он позволяет положить значение в «коробку»-переменную. В C++
для этого используется знак =
.
Оператор присваивания работает справа налево - он берёт значение справа от знака
=
и помещает его в переменную, указанную слева.
Пример:
int ledBrightness = 100; // В переменную ledBrightness помещается значение 100
В этом примере переменной ledBrightness
присваивается значение 100
, которое позже можно будет использовать, например, для управления яркостью светодиода.
Арифметические операторы
Эти операторы нужны для выполнения математических вычислений, как на уроке математики. С их помощью ваш Рудирон
сможет считать, сколько шагов прошёл робот или сколько энергии осталось в батарее.
-
Сложение (
+
). Складывает два числа. Пример:int steps = 10; int moreSteps = 5; int totalSteps = steps + moreSteps; // totalSteps теперь равно 15
-
Вычитание (
-
). Вычитает одно число из другого. Пример:int batteryLevel = 100; int energyUsed = 30; int remaining = batteryLevel - energyUsed; // remaining теперь равно 70
-
Умножение (
*
). Умножает числа. Пример:int speed = 5; // метров в секунду int time = 3; // секунды int distance = speed * time; // distance теперь равно 15 метрам
-
Деление (
/
). Делит одно число на другое. Пример:int totalPizzaSlices = 8; int friends = 4; int slicesPerFriend = totalPizzaSlices / friends; // slicesPerFriend равно 2
-
Остаток от деления (
%
). Возвращает остаток, который получается после целочисленного деления. Очень полезен, например, для проверки, является ли число чётным. Пример:int items = 7; int remainder = items % 2; // 7 разделить на 2 будет 3 с остатком 1. remainder равно 1. // Если остаток от деления на 2 равен 0, число чётное.
Операторы сравнения (отношения)
Эти операторы позволяют сравнивать значения и получать в ответ логический результат: true
(истина) или false
(ложь). Это как задать Рудирону
вопрос - «Температура уже выше 30 градусов?». Ответ на этот вопрос поможет программе принять решение.
-
Равно (
==
). Проверяет, равны ли два значения. Не путайте с=
! Пример:int targetTemp = 25; int currentTemp = 25; bool areEqual = (targetTemp == currentTemp); // areEqual будет true
-
Не равно (
!=
). Проверяет, что значения не равны. Пример:int levelA = 10; int levelB = 20; bool areDifferent = (levelA != levelB); // areDifferent будет true
-
Больше (
>
) и Меньше (<
). Проверяют, больше или меньше одно значение другого. Пример:int sensorValue = 50; int threshold = 30; bool isHigh = (sensorValue > threshold); // isHigh будет true
-
Больше или равно (
>=
) и Меньше или равно (<=
). Пример:int speed = 60; int speedLimit = 60; bool isLegal = (speed <= speedLimit); // isLegal будет true
Эти операторы - основа для принятия решений в программах. Например, «если
температура >= 28
, включить вентилятор».
Логические операторы
Логические операторы позволяют объединять несколько условий сравнения в одно сложное. Они работают со значениями true
и false
, как союзы «и», «или», «не» в русском языке.
-
Логическое И (
&&
). Возвращаетtrue
, только если оба условия истинны. Пример:// Включить свет, если темно И есть движение bool isDark = true; bool motionDetected = false; bool turnOnLight = isDark && motionDetected; // turnOnLight будет false
-
Логическое ИЛИ (
||
). Возвращаетtrue
, если хотя бы одно из условий истинно. Пример:// Запустить систему, если есть питание от батареи ИЛИ от солнечной панели bool hasBattery = true; bool hasSolar = false; bool canRun = hasBattery || hasSolar; // canRun будет true
-
Логическое НЕ (
!
). Инвертирует (меняет на противоположное) логическое значение. Пример:bool isDoorClosed = false; bool isDoorOpen = !isDoorClosed; // isDoorOpen будет true
Комбинированные операторы присваивания
Эти операторы - удобный способ сократить запись. Они позволяют выполнить арифметическую операцию с переменной и сразу же записать результат обратно в неё.
Оператор | Пример | Эквивалентно |
+= |
x += 5; |
x = x + 5; |
-= |
x -= 3; |
x = x - 3; |
*= |
x *= 2; |
x = x * 2; |
/= |
x /= 4; |
x = x / 4; |
Пример:
int brightness = 50;
brightness += 10; // Теперь brightness равно 60
Эти операторы часто используются в циклах для постепенного изменения значения, например, для плавной регулировки яркости светодиода.
Операторы инкремента и декремента
Это ещё более короткий способ увеличить или уменьшить значение переменной ровно на единицу. Они незаменимы при работе со счётчиками.
-
Инкремент (
++
). Увеличивает значение на 1. Пример:int clicks = 5; clicks++; // Теперь clicks равно 6
-
Декремент (
--
). Уменьшает значение на 1. Пример:int retriesLeft = 3; retriesLeft--; // Теперь retriesLeft равно 2
Условный (тернарный) оператор (? :
)
Это самый компактный способ сделать выбор из двух вариантов. Он работает по принципу «условие ? значение_если_истина : значение_если_ложь».
Аналогия из жизни. «На улице дождь? (условие) Возьми зонт (значение_если_истина), иначе возьми солнечные очки (значение_если_ложь)».
Пример:
int temperature = 30;
// Если температура > 25, скорость вентилятора будет 100, иначе 0.
int fanSpeed = (temperature > 25) ? 100 : 0;
Этот оператор очень удобен для коротких и ясных присваиваний по условию.
Преобразование типов
Иногда в программах для Рудирона
нужно преобразовать данные из одного типа в другой. Например, вы получили с датчика температуру 23.7
(тип float
), а на целочисленный дисплей нужно вывести 23
(тип int
).
- Неявное преобразование. Происходит автоматически, когда
C++
считает это безопасным. - Явное преобразование. Вы сами даёте команду на преобразование, указывая нужный тип в скобках.
Пример (деление int
с получением float
):
int total = 10;
int count = 4;
// Если просто поделить 10 / 4, результат будет 2 (целочисленное деление).
// Чтобы получить 2.5, нужно явно преобразовать одно из чисел в float.
float average = (float)total / count; // average теперь равно 2.5
Пример (отбрасывание дробной части):
float sensorTemp = 23.7;
int displayTemp = (int)sensorTemp; // displayTemp теперь равно 23
Преобразование типов — важный инструмент при работе с данными от датчиков и при выполнении точных вычислений.
Приоритет операторов
Когда в одном выражении используется несколько операторов, C++
выполняет их в строгом порядке, который определяется приоритетом. Это как в математике, где умножение выполняется раньше сложения.
Приоритет (выше - раньше) |
Операторы |
1 | () |
2 | ! , ++ , -- |
3 | * , / , % |
4 | + , - |
5 | < , <= , > , >= |
6 | == , != |
7 | && |
8 | || |
9 | ?: |
10 | = , += , -= и др. |
Если вы не уверены в порядке выполнения или хотите его изменить, всегда используйте скобки
()
. Код со скобками не только работает предсказуемо, но и гораздо легче читается.
Пример:
int result1 = 2 + 3 * 4; // Сначала 3*4=12, потом 2+12=14
int result2 = (2 + 3) * 4; // Сначала 2+3=5 в скобках, потом 5*4=20
Зачем это нужно?
Операторы — это «глаголы» языка C++
. Они позволяют программе выполнять действия: считать, сравнивать, комбинировать условия и присваивать значения. Без них наши переменные были бы просто мёртвыми данными. Освоив операторы, вы сможете писать программы, которые анализируют информацию с датчиков, реагируют на команды и управляют устройствами именно так, как вы задумали.
Вы изучили операторы, которые позволяют вашей плате Рудирон
выполнять вычисления, сравнения и принимать решения. Теперь переходите к следующему параграфу, чтобы научиться использовать структуры ветвления и заставить плату реагировать на разные ситуации. А чтобы попрактиковаться, выполните задания к этому параграфу
- Страницы
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home
-
imgs
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home