Арифметические операторы на языке C
Компилируемый язык Си поддерживает все стандартные арифметические операции:
- умножение;
- деление;
- сложение;
- вычитание;
- возведение в степень и прочие.
Одни из них осуществляются с помощью обычных операторов (плюсов, минусов, звёздочки, знака процентов), другие — специальных функций, которые содержаться в основном в библиотеке math.h. Операторы принято делить на тернарные, унарные, базовые бинарные, лево-присевающие бинарные и тернарные.
В данной статье идёт речь, прежде всего, об арифметических операциях и операторах, связанных с ними. Чем префикс отличается от постфикса? Как и почему нельзя найти остаток от деления у вещественных чисел? Как использовать static_cars?
Арифметика в Си и Си++
Присваивание
Позволяет присваивать переменной некоторое значение согласно типу, с помощью которой переменная была инициализирована.
Оператор » = «.
int a_1 = 16;
double a_2 = 12.6;
flout a_3 = 13.3;
char a_4 = 255;
bool a_5 = 3;
Не путать с оператором сравнения ==, который применяется главным образом в условиях и циклах!
Примечание: Далее будут встречаться операторы » += «, » -= «, » *= «, » %= » и » /= «. Их тоже относят к операторам присваивания, но для большего раскрытия материла они занесены в другой раздел.
Сложение и вычитание.
Используется для нахождения соответственно суммы и разности инициализированных переменных или чисел.
Оператор » + » для сложения и » — » для вычитания.
int a = 3, b = 6;
int c_1 = a+b, c_2 = a-b; // c_1 = 9 и c_2 = -3
int c_3 = c + t; // выдаст ошибку, так как переменная t не инициализирована
int c_4 = 4 + 5; // c_4 = 9
Часто для сложения и вычитания используют операторы » += » и » -= «, но их больше относят к операторам присваивания. Они используются для упрощения записи кода программы.
Пример:
int c_5 += 5; // соответствует записи c_5 = c_5 + 5
int c_6 -= 12; // соответствует записи c_6 = c_6 — 12
Инкремент
В зависимости от того, является ли оператор префиксным или постфиксным, прибавляет единицу или сразу при присвоении, или позже. Инкремент удобно использовать в циклах for, while и do…while.
Оператор » ++n » для префиксной и » n++ » для постфиксной переменной n.
int a = 3;
int b = 3;
int x1 = a++; // x1 = 3
int x2 = ++b; // x2 = 4
Декремент
В зависимости от того, является ли он префиксным или постфиксным, вычитает единицу или сразу, или позже. Как и в случае с инкрементом, декремент тоже используется при записи циклов.
Оператор » —n » для префиксной и » n— » для постфиксной переменной n.
int a = 3;
int b = 3;
int x1 = a—; // x1 = 3
int x2 = —b; // x2 = 2
Деление
Оператор позволяет находить частное целочисленных и вещественных значений переменных. Результат операции зависит от типа переменных. При делении любого значения на нуль компилятор выдаёт предупреждение, которое часто выглядит так:
main.cpp:17:11: warning: division by zero [-Wdiv-by-zero]
Floating point exception (core dumped)
Оператор » / «.
double a = 3.5, b = 1.9;
int c = a / 0; // warning!
int c_1 = a / b; // c_1 = 1
double c_2 = a / b; // c_2 = 1.84211
float c_3 = a / b; // c_3 = 1.84211
bool c_4 = a / b; // c_4 = 1
Оператор » /= » так же используется для деления целых и вещественных чисел.
int c_5 /= b; // соответствует записи c_5 = c_5 / b
Умножение
Позволяет находить произведение переменных и чисел. В зависимости от типа переменных выдаётся или целочисленный, или вещественный результат.
Оператор » * «.
double a = 3.5, b = 1.9;
int c_1 = a * b * 2; // c_1 = 13
double c_2 = a * b * 2; // c_2 = 13.3
float c_3 = a * b; // c_3 = 6.65
bool c_4 = a * b; // c_4 = 1
Оператор » *= » так же используется для перемножения целых и вещественных чисел чисел.
int c_5 *= b; // соответствует записи c_5 = c_5 * b
Не путать с указателями, которые тоже обозначаются звёздочкой!
Остаток от деления
В языках Си и Си++ данная операция используется только с целыми числами. При работе с такими типами, как float и double, нужно смотреть за корректностью выполнения программы. В одних случаях, их использование с оператором проходит без особых проблем, а в других — выдаёт ошибки компиляции.
Оператор » % «.
int a = 16, b = 8, d = 9;
int c_1 = a % b; // c_1 = 0
int c_2 = d % b; // c_2 = 1
int c_3 = b % d; // c_3 = 8
float c_4 = b % d; // c_4 = 8 -> ошибки нет
float a1 = 16, b1 = 8, d1 = 9;// error!!!
int c_5 = a1 % b1;
Оператор » %= » для данный операции тоже можно использовать.
int c_6 %= b; // соответствует записи c_6 = c_6 % b
Остаток от деления вещественных чисел
Операция остаток от деления у вещественных чисел невозможна, так как в процессе деления как таковой остаток вообще нельзя получить. Однако, если даны вещественные значения и оператор static_cast, можно без проблем применить данный оператор.
Пример:
double a = 16.8, b = 8.3, d = 9.6;
auto a_1 = static_cast<int>(a);
auto b_1 = static_cast<int>(b);
auto d_1 = static_cast<int>(d);
int c_1 = a_1 % b_1; // c_1 = 0
int c_2 = d_1 % b_1; // c_2 = 1
int c_3 = b_1 % d_1; // c_3 = 8
Чем отличаются унарные, бинарные и тернарные операторы?
Всего существует два унарных оператора: плюс » + » и минус » — «. Оба пишутся непосредственно перед операндом. Унарный плюс редко используется, так как он возвращает значение операнда. К бинарным относят сложение » + «, вычитание » — «, умножение » * «, деление » / «, остаток от деления » % «. Таким образом, есть всего 5 операций, которые применяются к 2-м операндам.
В языке Си существует только один тернарный оператор, который является условной операцией » ? : «, состоящей из трёх операндов. В общем виде запись тернарного оператора выглядит так:
условие ? выражение_1 : выражение_2
Если условие верно или истинно, то выполняется выражение_1. В противном случае выражение_2.
Пример:
int a = 3, b = 6;
a == b ? cout << «Yes» : cout << «No»; // No
a + 3 == b ? cout << «Yes» : cout << «No»; // Yes
a > b ? cout << a : cout << b; // 6
Куда делась операция возведения в степень?
В языках Си и Си++ не существует оператора, позволяющего возводить некоторое число в степень. Вместо него есть специальная функция pow(), которая подключается библиотекой math.h (для Си) или cmath (для Си++).
Пример:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << pow(2, 3); // число 2 возводиться в 3-ю степень, выводится 8
cout << pow(2.9, 3); // число 2.9 возводиться в 3-ю степень, выводится 24.389
return 0;
}

Здравствуйте господа!
Если не трудно,помогите,пожалуйста разобраться в части программы электроавтоматики к станку,написанную на языке СИ.
GB.in Current Ger = ((0+1) * (0)) + ((1+1) * (I1_7 && !I1_8)) + ((2+1) * (!I1_7 && I1_8)) + (-1);
Это кусочек программы,которая вычисляет номер включенного диапазона шпинделя.
Непонятен смысл выражений (0 +1),(0),(1+1),(2 +1),(-1)
1) GB.in Current Ger — это, вероятно, структура или объект, в котором хранится текущее состояние некоторого устройства или переменной. Current Ger — это, возможно, имя члена этой структуры или объекта.
2) Выражение в правой части присваивается значению Current Ger.
3) Выражение состоит из нескольких частей, объединенных с помощью операций сложения и умножения.
4) (0+1) * (0) — это выражение всегда равно 0, поскольку (0+1) равно 1, а (0) равно 0, а произведение 1 * 0 равно 0.
5) (1+1) * (I1_7 && !I1_8) — это выражение равно 2, если I1_7 истинно (не равно 0) и I1_8 ложно (равно 0), в противном случае оно равно 0. I1_7 и I1_8, вероятно, являются входными сигналами или переменными, которые могут принимать значения истина (true) или ложь (false), например, состояние датчиков или переключателей.
6) (2+1) * (!I1_7 && I1_8) — это выражение равно 3, если I1_7 ложно и I1_8 истинно, в противном случае оно равно 0.
7) (-1) — это отрицательное значение 1, то есть -1.
Таким образом, это выражение вычисляет некоторое значение в зависимости от комбинации значений I1_7 и I1_8. Это значение присваивается переменной Current Ger. Точное назначение этого кода трудно определить без дополнительного контекста, но, вероятно, оно связано с управлением состоянием или режимом работы станка на основе входных сигналов.