5.2 – Арифметические операторы
Добавлено 3 мая 2021 в 14:55
Унарные арифметические операторы
В C++ есть два унарных арифметических оператора, плюс (+) и минус (-). Напоминаем, что унарные операторы – это операторы, которые принимают только один операнд.
Оператор | Обозначение | Пример использования | Операция |
---|---|---|---|
Унарный плюс | + | +x | Значение x |
Унарный минус | - | -x | Отрицательное значение x |
Оператор унарного минуса возвращает операнд, умноженный на -1. Другими словами, если x = 5, -x равно -5.
Оператор унарного плюса возвращает значение операнда. Другими словами, +5 равно 5, а +x равно x. Как правило, вам не нужно использовать этот оператор, поскольку он избыточен. Он был добавлен в основном для обеспечения симметрии с унарным оператором минус.
Для наилучшего эффекта оба этих оператора следует размещать непосредственно перед операндом (например, -x
, а не - x
).
Не путайте оператор унарного минуса с оператором бинарного вычитания, в котором используется тот же символ. Например, в выражении x = 5 - -3;
первый минус – это оператор бинарного вычитания, а второй – оператор унарного минуса.
Бинарные арифметические операторы
В C++ есть 5 бинарных арифметических операторов. Бинарные операторы – это операторы, которые принимают левый и правый операнды.
Оператор | Обозначение | Пример использования | Операция |
---|---|---|---|
Сложение | + | x + y | x плюс y |
Вычитание | - | x - y | x минус y |
Умножение | * | x * y | x , умноженное на y |
Деление | / | x / y | x , деленное на y |
Остаток от деления | % | x % y | остаток от деления x на y |
Операторы сложения, вычитания и умножения работают так же, как и в реальной жизни, без каких-либо оговорок.
Деление и остаток от деления требуют дополнительных пояснений. О делении мы поговорим ниже, а об остатке от деления – в следующем уроке.
Целочисленное деление и деление с плавающей запятой
Проще всего представить себе, что оператор деления имеет два разных «режима».
Если один (или оба) операнда являются значениями с плавающей точкой, оператор деления выполняет деление с плавающей точкой. Деление с плавающей точкой возвращает значение с плавающей точкой, и дробная часть сохраняется. Например, 7.0 / 4 = 1.75, 7 / 4.0 = 1.75 и 7.0 / 4.0 = 1.75. Как и во всех арифметических операциях с плавающей точкой, здесь могут возникать ошибки округления.
Если оба операнда являются целыми числами, оператор деления вместо этого выполняет целочисленное деление. Целочисленное деление отбрасывает любые дробные части и возвращает целочисленное значение. Например, 7 / 4 = 1, потому что дробная часть результата отбрасывается. Точно так же -7 / 4 = -1, потому что дробная часть опускается.
Предупреждение
До C++11 целочисленное деление с отрицательным операндом могло округляться в большую или меньшую сторону. Таким образом, -5 / 3 могло дать результат -1 или -2. Это было исправлено в C++11, где дробная часть всегда отбрасывается (округляется до 0).
Использование
static_cast<>
для деления с плавающей точкой с целочисленными значениямиСказанное выше поднимает вопрос: если у нас есть два целых числа и мы хотим разделить их без потери дробной части, как нам это сделать?
В уроке «4.11 – Символы» мы показали, как можно использовать оператор static_cast<>
для преобразования значения char
в целочисленный тип, чтобы оно печаталось как целое число, а не как символ.
Аналогичным образом мы можем использовать static_cast<>
для преобразования значения целочисленного типа в число с плавающей точкой, чтобы мы, вместо целочисленного деления, смогли выполнить деление с плавающей точкой. Рассмотрим следующий код:
#include <iostream> int main() { int x{ 7 }; int y{ 4 }; std::cout << "int / int = " << x / y << '\n'; std::cout << "double / int = " << static_cast<double>(x) / y << '\n'; std::cout << "int / double = " << x / static_cast<double>(y) << '\n'; std::cout << "double / double = " << static_cast<double>(x) / static_cast<double>(y) << '\n'; return 0; }
Эта программа дает следующий результат:
int / int = 1 double / int = 1.75 int / double = 1.75 double / double = 1.75
Приведенный выше пример показывает, что если любой из операндов является числом с плавающей точкой, результатом будет деление с плавающей точкой, а не целочисленное деление.
Деление на ноль
Попытка разделить на 0 (или 0.0) обычно приводит к сбою программы, так как результаты математически не определены!
#include <iostream> int main() { std::cout << "Enter a divisor: "; int x{}; std::cin >> x; std::cout << "12 / " << x << " = " << 12 / x << '\n'; return 0; }
Если вы запустите показанную выше программу и введете 0, ваша программа завершится со сбоем. Попробуйте, это не повредит вашему компьютеру.
Арифметические операторы присваивания
Оператор | Обозначение | Пример использования | Операция |
---|---|---|---|
Присваивание | = | x = y | Присвоить значение y переменной x |
Сложение с присваиванием | += | x += y | Добавить y к x |
Вычитание с присваиванием | -= | x -= y | Вычесть y из x |
Умножение с присваиванием | *= | x *= y | Умножить x на y |
Деление с присваиванием | /= | x /= y | Разделить x на y |
Остаток от деления с присваиванием | %= | x %= y | Положить остаток от x / y в x |
До этого момента, когда вам нужно было добавить 4 к переменной, вы, вероятно, делали следующее:
х = х + 4; // добавляем 4 к существующему значению x
Это работает, но немного неудобно и требует для выполнения двух операторов (operator+
и operator=
).
Поскольку написание таких инструкций, как x = x + 4
, очень распространено, C++ для удобства предоставляет пять арифметических операторов присваивания. Вместо того, чтобы писать x = x + 4
, вы можете написать x += 4
. Вместо x = x * y
вы можете написать x *= y
.
Таким образом, приведенную выше строку можно переписать так:
х += 4; // добавляем 4 к существующему значению x
Оригинал статьи:
- 5.2 — Arithmetic operators
Теги
C++ / CppLearnCppstatic_castДля начинающихОбучениеОператор (программирование)Оператор присваиванияПрограммированиеЦелочисленное делениеНазад
Оглавление
Вперед
Арифметические операции | C++ | CodeBasics
На базовом уровне компьютеры оперируют только числами. Даже в прикладных программах на высокоуровневых языках внутри много чисел и операций над ними. К счастью, для старта достаточно знать обычную арифметику — с нее и начнем.
Для сложения двух чисел в математике мы пишем, например, 3 + 4. В программировании — то же самое. Вот программа, складывающая два числа:
// Не забываем точку с запятой в конце, // так как каждая строчка в коде - инструкция int main() { 3 + 4; return 0; }
Если запустить эту программу на выполнение, то она тихо отработает и завершиться. На экран ничего не будет выведено. Операция сложения, как и остальные операции, сама по себе ничего не делает кроме сложения. Чтобы воспользоваться результатом сложения, его нужно, например, вывести на экран.
int main() { std::cout << 3 + 4; return 0; }
После запуска на экране появится результат:
7
Кроме сложения доступны следующие операции:
* *
— умножение
* /
— деление
* -
— вычитание
%
— остаток от деленияТеперь давайте выведем на экран результат деления, а потом результат возведения в степень:
int main() { std::cout << 8 / 2; std::cout << 3 * 3 * 3; }
4 27
Задание
Выведите на экран результат деления числа 81 на 9.
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
Всегда отбивайте арифметические операторы пробелами от самих чисел (операндов) – это хороший стиль программирования. Поэтому в наших примерах
std::cout << 3 + 4
, а неstd::cout << 3+4
.Остаток от деления отбрасывается с округлением вниз. Таким образом результат деления – всегда целое число. Как работать с вещественными числами будет показано в следующих уроках.
←Предыдущий
Следующий→Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github. com/hexlet-basics
арифметических выражений и приоритет операторов в C | Учебники по программированию на C
Учебники по программированию на C
Арифметическое выражение представляет собой комбинацию переменных, констант и арифметических операторов. В C поддерживаются следующие арифметические операторы:
, -
, *
, /
и %
. Операнды включают целые числа и числа с плавающей запятой. Некоторые алгебраические выражения и соответствующие им выражения C приведены в следующей таблице.
Алгебраическое выражение | Выражение C |
---|---|
| (а + б) * (а–б) |
| (а * б) / с |
| 2 * х * х + 3 * х |
Арифметические выражения оцениваются с помощью оператора присваивания вида переменная = выражение
.
c = a - b / d + e
Приоритет арифметических операторов в C
Чтобы однозначно определить значение и значение выражения, мы применяем правила приоритета и ассоциативности операторов. Арифметические выражения без круглых скобок оцениваются слева направо с использованием правил приоритета операторов. В C арифметические операторы имеют два разных уровня приоритета.
- Высокий приоритет
* / %
- Низкий приоритет
+ -
Базовая процедура вычисления выражения включает два прохода слева направо. Операторы с высоким приоритетом применяются во время первого прохода, а операторы с низким приоритетом применяются во время второго прохода.
Например, оператор x = 8 – 15 / 5 + 2 * 5 – 7 оценивается следующим образом:
- Первый проход
-
x = 8 - 5 + 2 * 5 -7
90 063
x = 8 - 5 + 10 - 7
-
-
х = 3 + 10 - 7
-
х = 13 - 7
-
х = 6
Эти шаги показаны на следующем рисунке.
Однако можно использовать круглые скобки для изменения порядка вычисления выражения. Выражение в скобках имеет наивысший приоритет. Следующие правила используются для вычисления выражений, содержащих скобки.
- Подвыражения в скобках оцениваются слева направо.
- При наличии вложенных скобок оценка начинается с самого внутреннего подвыражения.
- Порядок применения операторов при вычислении подвыражений определяется с помощью правила приоритета.
- Если в подвыражении присутствуют два или более оператора с одинаковым уровнем приоритета, применяется правило ассоциативности.
- Арифметические выражения оцениваются слева направо с использованием правил старшинства.
- Выражения в круглых скобках имеют наивысший приоритет.
Например, оператор x = 8 – 14 / (5 + 2) * (8 – 7) оценивается следующим образом:
- Первый проход
-
x = 8 – 14 / 7 * (8 -7)
-
x = 8 - 14 / 7 * 1
-
- Второй проход
-
x = 8 - 2 * 1
90 066 -
х = 8 - 2
-
- Третий проход
-
x = 6
-
Приоритет операторов и ассоциативность в C
В следующей таблице показан полный список операторов C, их уровни приоритета и правила их ассоциации.
Оператор | Описание | Ассоциативность | Ранг |
---|---|---|---|
() | Функциональный вызов | Слева направо | 1 |
[] | Ссылка на элемент массива | ||
+ | Унарный плюс | Справа налево | 2 |
– | Унарный минус | ||
++ | Приращение | ||
— | Уменьшение | ||
! | Логическое отрицание | ||
~ | Единицы дополняют | ||
* | Справочник указателя | ||
и | Адрес | ||
размер | Размер объекта | ||
(тип) | Тип литой (преобразование) | ||
* | Умножение | Слева направо | 3 |
/ | Подразделение | ||
% | Модуль | ||
+ | Дополнение | Слева направо | 4 |
– | Вычитание | ||
<< | Сдвиг влево | Слева направо | 5 |
>> | Правый сдвиг | ||
< | Менее | Слева направо | 6 |
<= | Меньше или равно | ||
> | Больше | ||
>= | Больше или равно | ||
== | Равенство | Слева направо | 7 |
Побитовое исключающее ИЛИ | Слева направо | 9 | |
| | Побитовое ИЛИ | Слева направо | 10 |
&& | Логическое И | Слева направо | 11 |
|| | Логическое ИЛИ | Слева направо | 12 |
?: | Условный оператор | Справа налево | 13 |
= | Оператор присвоения | Справа налево | 14 |
, | Оператор запятой | Слева направо | 15 |
Арифметические операторы в программировании на C
Операторы в C
В этом уроке мы рассмотрим, что такое арифметические операторы, и изучим различные типы арифметических операторов с помощью примеров.
Что такое арифметические операторы
Арифметические операторы в C используются для выполнения арифметических или математических операций. операции над операндами.
Арифметические операторы бывают двух типов:
- Унарные операторы — Операторы, которые оперируют или работают с одним операндом, называются унарными. операторы. Например: (++, — ).
- Бинарные операторы — Операторы, которые оперируют или работают с двумя операндами, называются бинарными. операторы. Например: ( +, – , *, /, % ).
Унарные операторы
Существует 2 типа унарных операторов:
- Инкрементный оператор ++
- Оператор декремента —
Оператор приращения ++
Оператор приращения используется для увеличения значения переменной на 1.
Существует 2 типа операторов приращения:
- Прединкремент
- Постинкремент
Pre-Increment
Оператор Pre-Increment используется для увеличения значения переменной
на 1, прежде чем использовать его в выражении. В Pre-Increment значение сначала увеличивается
а затем используется внутри выражения. Давайте посмотрим на пример для большего понимания.
Пример
int x=5, y; у=++х; // значение x увеличивается на 1 и затем сохраняется в y
В приведенном выше примере значение x , равное 5, является первым увеличьте на 1 и затем сохраните в x . Таким образом, результат y равен 6.
Post-Increment
Оператор Post-Increment используется для увеличения значения переменная на 1 после полного выполнения выражения, в котором используется постинкремент. В Post-Increment значение сначала используется в выражении, а затем увеличивается на 1. Давайте посмотрим на пример для большего понимания.
Пример
инт х=5, у; у=х++; // значение x сначала сохраняется в y, а затем увеличивается на 1
В приведенном выше примере сначала сохраняется значение x , равное 5
в y и после этого увеличилось на 1. Таким образом, результат y равен 5, а значение
из x становится 6.
Оператор уменьшения —
Оператор уменьшения используется для уменьшения значения переменной на 1.
Существует 2 типа операторов декремента:
- Преддекремент
- Постдекремент
Pre-Decrement
Оператор Pre-Decrement используется для уменьшения значения переменной на 1, прежде чем использовать его в выражении. В Pre-Decrement значение сначала уменьшается на 1, а затем используется внутри выражения. Давайте посмотрим на пример для большего понимания.
Пример
int x=5, y; у=--х; // значение x уменьшается на 1 и затем сохраняется в y
В приведенном выше примере значение x , равное 5, является первым уменьшите на 1, а затем сохраните в x . Таким образом, результат y равен 4.
Постдекремент
Оператор постдекремента используется для уменьшения значения
переменная на 1 после полного выполнения выражения, в котором используется постдекремент. В пост-декременте значение сначала используется в выражении, а затем уменьшается на 1.
Давайте посмотрим на пример для большего понимания.
Пример
int x=5, y; у=х--; // значение x сначала сохраняется в y, а затем уменьшается на 1
В приведенном выше примере сначала сохраняется значение x , равное 5 в y и после этого уменьшилось на 1. Таким образом, результат y равен 5, а значение из x становится 4.
Бинарные операторы
Существует 5 типов бинарных операторов:
- + Дополнение
- — Вычитание
- * Умножение
- / Отдел
- % Модуль
+ Оператор сложения
+ Оператор сложения используется для сложения значения двух или более переменные. Давайте посмотрим на пример для большего понимания.
Пример
int x=5, y=2, z; г=х+у; // значение z становится 7
В приведенном выше примере значение x и y добавлен первым
а затем сохраняется в z . Таким образом, результат z равен 7.
— Оператор вычитания
— Оператор вычитания используется для вычитания значения двух или более переменных. Давайте посмотрим на пример для большего понимания.
Пример
int x=5, y=2, z; г=х-у; // значение z становится 3
В приведенном выше примере значение y вычитается из x , а окончательный результат сохраняется в z . Таким образом, результат z равен 3.
* Оператор умножения
* Оператор умножения используется для умножения значения две и более переменных. Давайте посмотрим на пример для большего понимания.
Пример
int x=5, y=2, z; г=х*у; // значение z становится равным 10
В приведенном выше примере значение x и y является первым умножается и затем сохраняется в z . Итак, результат z равно 10.
/ Оператор деления
/ Оператор деления используется для деления значения на два или более
переменные, и в результате деления возвращается частное.