Разное

Арифметическая операция: Арифметическая операция | это… Что такое Арифметическая операция?

Арифметические операции | Основы Python

Для перемещения по курсу нужно зарегистрироваться

1. Введение ↳ теория

2. Hello, World! ↳ теория / тесты / упражнение

3. Инструкции ↳ теория / тесты / упражнение

4. Арифметические операции ↳ теория / тесты / упражнение

5. Ошибки оформления — синтаксис и линтер ↳ теория / тесты / упражнение

6. Строки ↳ теория / тесты / упражнение

7. Переменные ↳ теория / тесты / упражнение

8. Выражения в определениях ↳ теория / тесты / упражнение

9. Именование ↳ теория / тесты / упражнение

10. Интерполяция ↳ теория / тесты / упражнение

11. Извлечение символов из строки ↳ теория / тесты / упражнение

12. Срезы строк ↳ теория / тесты / упражнение

13. Типы данных ↳ теория / тесты / упражнение

14. Неизменяемость и примитивные типы ↳ теория / тесты / упражнение

15. Функции и их вызов ↳ теория / тесты / упражнение

16. Сигнатура функции ↳ теория / тесты / упражнение

17.

Вызов функции — выражение ↳ теория / тесты / упражнение

18. Детерминированность ↳ теория / тесты / упражнение

19. Стандартная библиотека ↳ теория / тесты / упражнение

20. Свойства и методы ↳ теория / тесты / упражнение

21. Цепочка методов ↳ теория / тесты / упражнение

22. Определение функций ↳ теория / тесты / упражнение

23. Возврат значений ↳ теория / тесты / упражнение

24. Параметры функций ↳ теория / тесты / упражнение

25. Необязательные параметры функций ↳ теория / тесты / упражнение

26. Именованные аргументы ↳ теория / тесты / упражнение

27. Окружение ↳ теория / тесты / упражнение

28. Логика ↳ теория / тесты / упражнение

29. Логические операторы ↳ теория / тесты / упражнение

30. Результат логических операций ↳ теория / тесты / упражнение

31. Условные конструкции ↳ теория / тесты / упражнение

32. Оператор Match ↳ теория / тесты / упражнение

33. Цикл while ↳ теория / тесты / упражнение

34. Агрегация данных ↳ теория / тесты / упражнение

35. Обход строк ↳ теория / тесты / упражнение

36. Условия внутри тела цикла ↳ теория / тесты / упражнение

37. Цикл for ↳ теория / тесты / упражнение

38. Отладка ↳ теория / тесты / упражнение

39. Модули ↳ теория / тесты / упражнение

40. Модули поглубже ↳ теория / тесты / упражнение

41. Пакеты ↳ теория / тесты / упражнение

42. Модуль random ↳ теория / тесты / упражнение

43. Кортежи ↳ теория / тесты / упражнение

44. История развития языка Python ↳ теория / тесты

Испытания

1. Фибоначчи

2. Сумма двоичных чисел

3. Физзбазз

4. Классификация отрезков

5. Вращение троек

6. Разница углов

7. Степени тройки

8. Фасад

9. Счастливый билет

10. Идеальные числа

11. Инвертированный регистр

12. Счастливые числа

13. Шифрование

Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как

Не понятна формулировка, нашли опечатку?

Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку

Что-то не получается в уроке?

Загляните в раздел «Обсуждение»:

  1. Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
  2. Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
  3. Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!

Подробнее о том, как задавать вопросы по уроку

C++ | Арифметические операции

Последнее обновление: 09.02.2023

Арифметические операции производятся над числами. Значения, которые участвуют в операции, называются операндами. В языке программирования C++ арифметические операции могут быть бинарными (производятся над двумя операндами) и унарными (выполняются над одним операндом). К бинарным операциям относят следующие:

  • +

    Операция сложения возвращает сумму двух чисел:

    
    int a {10};
    int b {7};
    int c {a + b};  // 17
    int d {4 + b};  // 11
    

    В этом примере результат операций применяется для инициализации переменных, но мы также можем использовать операцию присвоения для установки значения переменных:

    int a {10}; int b {7}; int c = a + b; // 17 int d = 4 + b; // 11
  • Операция вычитания возвращает разность двух чисел:

    
    int a {10};
    int b {7};
    int c {a - b};  // 3
    int d {4 - b};  // -3
    
  • *

    Операция умножения возвращает произведение двух чисел:

    
    int a {10};
    int b {7};
    int c {a * b};  // 70
    int d {4 * b};  // 28
    
  • /

    Операция деления возвращает частное двух чисел:

    
    int a {26};
    int b {5};
    int c {a / b};      // c = 5
    int d {4 / b};     // d = 0
    

    При делении стоит быть внимательным, так как если в операции участвуют два целых числа, то дробная часть (при ее наличии) будет отбрасываться, даже если результат присваивается переменной float или double:

    
    #include <iostream>
    
    int main()
    {
        int a {26};
        int b {5};
        float c {a / b};      // c = 5
        double d {4 / b};     // d = 0
        std::cout << "c = " << c << std::endl;
        std::cout << "d = " << d << std::endl;
    }
    

    Чтобы результат представлял число с плавающей точкой, один из операндов также должен представлять число с плавающей точкой:

    
    #include <iostream>
    
    int main()
    {
        float a {26};
        int b {5};
        float c {a / b};        // c = 5. 2
        double d {4.0 / b};     // d = 0.8
        std::cout << "c = " << c << std::endl;
        std::cout << "d = " << d << std::endl;
    }
    
  • %

    Операция получения остатка от целочисленного деления:

    
    int a {26};
    int b {5};
    int c {a % b};      // c = 26 % 5 = 26 - 5 * 5 = 1
    int d {4 % b};     // d = 4 % 5 = 4
    

Некоторые особенности при работе с числами с плавающей точкой

При сложении или вычитании чисел с плавающей точкой, которые сильно отличаются по значению, следует проявлять осторожность. Например, сложим число 1.23E-4 (0.000123) и 3.65E+6 (3650000). Мы ожидаем, что сумма будет равна 3650000,000123. Но при преобразовании в число с плавающей запятой с точностью до семи цифр это становится следующим

3.650000E+06 + 1.230000E-04 = 3.650000E+06

Или соответствующий код на С++:


#include <iostream>

int main()
{
    float num1{ 1. 23E-4  };        // 0.000123
    float num2{ 3.65E+6  };        // 3650000
    float sum {num1 + num2};       // sum =3.65e+06
    std::cout << "sum =" << sum << "\n";
}

То есть первое число никак не изменилось, поскольку для хранения точности отводится только 7 цифр.

Также стоит отметить, что стандарт IEEE, который реализуется компиляторами С++, определяет специальные значения для чисел с плавающей точкой, в которых мантисса на бинарном уровне состоит только из нулей, а экспонента, которая состоит из одних единиц, в зависимости от знака представляет значения +infinity (плюс бесконечность +∞) и -infinity (минус бесконечность -∞). И при делении положительного числа на ноль, результатом будет +infinity, а при делении отрицательного числа на ноль — -infinity.

Другое специальное значение с плавающей точкой, определенное этим стандартом, представляет значение NaN (не число).

Это значение представляет результат операции, который не определяется математически, например, когда ноль делится на ноль или бесконечность на бесконечность. Результатом любой операции, в которой один или оба операнда являются NaN, также является NaN.

Для демонстрации рассмотрим следующую программу:


#include <iostream>

int main()
{
    double a{ 1.5 }, b{}, c{}, d {-1.5};
    double result { a / b };
    std::cout << a << "/" << b << " = " << result << std::endl;
    result = d / c;
    std::cout << d << "/" << c << " = " << result << std::endl;
    result = b / c;
    std::cout << b << "/" << c << " = " << result << std::endl;
    std::cout << result << " + " << a << " = " << result + a << std::endl;
}

В выражении a / b число 1. 5 делится на 0, поэтому результатом будет плюс бесконечность.

Аналогично в выражении d / c число -1.5 делится на 0, поэтому результатом будет минус бесконечность.

В выражении b / c число 0 делится на 0, поэтому результатом будет NaN.

Соответственно последнее выражение result + a будет аналогично NaN + 0, соответственно результатом тоже будет NaN

Консольный вывод программы


1.5/0 = inf
-1.5/0 = -inf
0/0 = nan
nan + 1.5 = nan

Инкремент и декремент

Также есть две унарные арифметические операции, которые производятся над одним числом: ++ (инкремент) и — (декремент). Каждая из операций имеет две разновидности: префиксная и постфиксная:

  • Префиксный инкремент.

    Увеличивает значение переменной на единицу и полученный результат используется как значение выражения ++x

    
    #include <iostream>
    
    int main()
    {
        int a {8};
        int b {++a};
        std::cout << "a = " << a << std::endl;  // a = 9
        std::cout << "b = " << b << std::endl;  // b = 9
    }
    
  • Постфиксный инкремент.

    Увеличивает значение переменной на единицу, но значением выражения x++ будет то, которое было до увеличения на единицу

    
    #include <iostream>
    
    int main()
    {
        int a {8};
        int b {a++};
        std::cout << "a = " << a << std::endl;  // a = 9
        std::cout << "b = " << b << std::endl;  // b = 8
    }
    
  • Префиксный декремент.

    Уменьшает значение переменной на единицу, и полученное значение используется как значение выражения —x

    
    #include <iostream>
    
    int main()
    {
        int a {8};
        int b {--a};
        std::cout << "a = " << a << std::endl;  // a = 7
        std::cout << "b = " << b << std::endl;  // b = 7
    }
    
  • Постфиксный декремент.

    Уменьшает значение переменной на единицу, но значением выражения x— будет то, которое было до уменьшения на единицу

    
    #include <iostream>
    
    int main()
    {
        int a {8};
        int b {a--};
        std::cout << "a = " << a << std::endl;  // a = 7
        std::cout << "b = " << b << std::endl;  // b = 8
    }
    

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

Операторы могут быть левоассоциативными — такие операторы выполняются слева направо и правоассоциативными — выполняются справа налево. Подавляющее большинство операторов левоассоциативны (например, бинарные арифметические операции), поэтому большинство выражений оценивается слева направо. Правоассоциативными операторами являются все унарные операторы, различные операторы присваивания и условный оператор.

Кроме того, одни операции имеют больший приоритет, чем другие и поэтому выполняются вначале. Операции в порядке уменьшения приоритета:

+ (инкремент), — (декремент)
* (умножение), / (деление), % (остаток от деления)
+ (сложение), — (вычитание)

Приоритет операций следует учитывать при выполнении набора арифметических выражений:


int a = 8;
int b = 7;
int c = a + 5 * ++b;      // 48

Хотя операции выполняются слева направо, но вначале будет выполняться операция инкремента ++b, которая увеличит значение переменной b и возвратит его в качестве результата, так как эта операция имеет больший приоритет. Затем выполняется умножение 5 * ++b, и только в последнюю очередь выполняется сложение a + 5 * ++b

Следует учитывать, что если в одной инструкции для одной переменной сразу несколько раз вызываются операции инкремента и декремента, то результат может быть неопределенным, и много зависит от конкретного компилятора. Например:


int count {1};
int result = ++count * 3 + count++ * 5;

Так, и g++, и clang++ скомпилируют данный код, и результат переменной result будет таким, как в принципе и ожидается — 16, но компилятор clang++ также сгенерирует предупреждение.

Переопределение порядка операций

Скобки позволяют переопределить порядок вычислений. Например:


#include <iostream>

int main()
{
    int a {8};
    int b {7};
    int c {(a + 5) * ++b};      // c = 104
    std::cout << "c = " << c << std::endl;
}

Несмотря на то, что операция сложения имеет меньший приоритет, но вначале будет выполняться именно сложение, а не умножение, так как операция сложения заключена в скобки.

НазадСодержаниеВперед

Арифметические операторы — Основы программирования

Кеннет Лерой Басби и Дэйв Брауншвейг

Обзор

Основными арифметическими операциями являются сложение, вычитание, умножение и деление. Арифметика выполняется в соответствии с порядком операций. [1]

Обсуждение

Оператор выполняет действие над одним или несколькими операндами. Общие арифметические операторы:

Действие Общий символ
Дополнение +
Вычитание -
Умножение *
Отдел /
Модуль (связанный с целыми числами) %

Эти арифметические операторы являются бинарными, то есть имеют два операнда. Операнды могут быть как константами, так и переменными.

возраст + 1

Это выражение состоит из одного оператора (сложения) с двумя операндами. Первый представлен переменной с именем age, а второй — буквальной константой. Если бы age имел значение 14, то выражение оценивало бы (или равнялось) 15.

Эти операторы работают так, как вы их выучили на протяжении всей жизни, за исключением деления и модуля. Обычно мы думаем о делении как о результате результата, который может иметь дробную часть (тип данных с плавающей запятой). Однако деление, когда оба операнда имеют целочисленный тип данных, может действовать по-разному. Пожалуйста, обратитесь к следующему разделу «Целочисленное деление и модуль».

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

Многие языки программирования поддерживают комбинацию операций присваивания ( = ) и арифметических операций ( + , - , * , / , % ). В различных учебниках они называются «составными операторами присваивания» или «комбинированными операторами присваивания». Их использование можно объяснить с точки зрения оператора присваивания и арифметических операторов. В таблице мы будем использовать переменную age и можно предположить, что она имеет целочисленный тип данных.

 

Примеры арифметических назначений: Эквивалентный код:
возраст += 14; возраст = возраст + 14;
возраст -= 14; возраст = возраст - 14 лет;
возраст *= 14; возраст = возраст * 14;
возраст /= 14 лет; возраст = возраст / 14 лет;
возраст %= 14; возраст = возраст % 14;

Псевдокод

 Основная функция
    . .. Эта программа демонстрирует арифметические операции.
    Объявить целое число
    Объявить целое число b
    
    Присвойте а = 3
    Присвоить б = 2
    Вывод «а =» и а
    Вывод "б =" & б
    Вывод «а + б =» & а + б
    Вывод "a - b =" & a - b
    Вывод «a * b =» & a * b
    Вывод "а/б =" & а/б
    Вывод "а % b = " & а % b
Конец
 

Выход

 а = 3
б = 2
а + б = 5
а - б = 1
а * б = 6
а/б = 1,5
а % б = 1
 

Блок-схема

Ссылки

  • cnx.org: основы программирования — модульный структурированный подход с использованием C++
  • Flowgorithm — язык программирования блок-схем

  1. Википедия: Арифметические операторы ↵

3.4 Основные арифметические операторы — Основы компьютерного программирования в Ruby [Книга]

Теперь, когда некоторые классы, определяющие различные типы данных, были введены, что вы можете сделать с ними? Как и все остальное программирование языков, Ruby может выполнять множество математических операций. В Таблице 3-1 показано, как использовать Ruby в качестве Калькулятор.

Таблица 3-1. Основные арифметические операторы

Символ

Операция

Пример

+

Дополнение

х = 6 + 2

8

-

Вычитание

х = 3 - 2

1

*

Умножение

х = 5 * 2

10

/

Подразделение

х = 16/8

2

%

Модуль

х = 5 % 3

2

**

Мощность

х = 2 ** 4

16

Все перечисленные операторы являются бинарными, т. е. оператор имеет два операнда. Например, команда A + B — это бинарная операция, где A и B — это два операнда и + является оператором.

При вводе математических операций в интерпретаторе Ruby учитывается порядок действий. Чтобы изменить порядок операции, используйте круглые скобки. Попробуйте ввести в команду следующее строка:

 irb  (    main    ):    001    :    0    >     x     =     10     +     4     /     2   

What result ты получил? Теперь попробуйте ввести следующее в подсказка:

 irb  (   основной   ):   001   :   0   >    = 30032 (   10   +   4   )   /   2  

Большинство операторов должны выглядеть знакомыми.

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

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