Арифметические операторы в c: С | Арифметические операции

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 + yx плюс y
Вычитание-x - yx минус y
Умножение*x * yx, умноженное на y
Деление/x / yx, деленное на 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
  • 900 71

    Эти шаги показаны на следующем рисунке.

    Однако можно использовать круглые скобки для изменения порядка вычисления выражения. Выражение в скобках имеет наивысший приоритет. Следующие правила используются для вычисления выражений, содержащих скобки.

    • Подвыражения в скобках оцениваются слева направо.
    • При наличии вложенных скобок оценка начинается с самого внутреннего подвыражения.
    • Порядок применения операторов при вычислении подвыражений определяется с помощью правила приоритета.
    • Если в подвыражении присутствуют два или более оператора с одинаковым уровнем приоритета, применяется правило ассоциативности.
    • Арифметические выражения оцениваются слева направо с использованием правил старшинства.
    • Выражения в круглых скобках имеют наивысший приоритет.

    Например, оператор 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, их уровни приоритета и правила их ассоциации.

    9
    Оператор Описание Ассоциативность Ранг
    () Функциональный вызов Слева направо 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.

    / Оператор деления

    / Оператор деления используется для деления значения на два или более переменные, и в результате деления возвращается частное.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *