Следует различать термины "операция" (выполняемое действие) и "оператор" (обозначение для операции). Во-первых, в разных языках программирования для одной и той же операции могут применяться разные обозначения, например, деление нацело в Python обозначается ``//``, а в Pascal -- ``div``. Во-вторых, одно обозначение может использоваться для разных операций в зависимости от типа аргументов, например, в С++ ``<<`` может означать операцию сдвига битов для целых чисел или операцию вывода для потоков ввода-вывода. В С такая неоднозначность только одна: символ ``/`` может обозначать обычное деление или деление нацело, если оба аргумента операции -- целые числа.
Операция присваивания позволяет поместить в переменную новое значение. При необходимости происходит преобразование, при помещении вещественного значения в целую переменную отбрасывается дробная часть, а также возможно переполнение, обработка которого зависит от настроек компилятора.
Для выполнения арифметических действий используются операции ``x+y``, ``x-y``, ``x*y`` и ``x/y``. Операции умножения и деления имеют более высокий приоритет, чем сложение и вычитание, при необходимости используются скобки. Арифметические операции выполняются слева направо. Для смены знака используется операция ``-x``.
Тип результата арифметической операции определяется максимумом из размеров аргументов, поэтому при вычислениях с целыми возможно переполнение. Если один из аргументов имеет вещественный тип, то второй аргумент тоже преобразуется к вещественному типу.
```c
double a;
a = 2+2*2; // a=6
a = -a; // a=-6
a=10000*1000000; // переполнение a=1410065408
a=10000.0*1000000; // a=1e10
```
Если оба аргумента операции ``x/y`` являются целыми, то выполняется деление нацело. Для выполнения обычного деления один из аргументов операции нужно преобразовать в вещественное. Для этого нужно использовать операцию преобразования: ``(тип)e``.
Для нахождения остатка от деления используются операция ``x%y``, оба аргумента операции должны иметь целый тип.
Часто при выполнении вычислений требуется выполнить одно арифметическое действие на переменной и результат вычислений поместить в ту же переменную. Для этого в языке С были добавлены специальные операции ``x+=y``, ``x-=y``, ``x*=y``, ``x/=y`` и ``x%=y``.
```c
int a=5;
a+=6; // эквивалентно a=a+6; результат a=11
a*=a+1; // эквивалентно a=a*(a+1); результат a=132
```
Пи выполнении циклов часто нужно изменять значение переменной на 1. Для этих целей в С используются операции ``++x`` (инкремент) и ``--x`` (декремент).
```
int a=1;
++a; // эквивалентно a+=1; результат a=2
--a; // эквивалентно a-=1; результат a=1
```
Кроме префиксной формы инкремента и декремента в С иногда используется постфиксные формы этих операций: ``x++`` и ``x--``. Отличаются они возвращаемым значением, результатом постфиксной формы является значение изменяемой переменной до изменения.
```
int a, b=1;
a=++b; // результат a=2, b=2
// эквивалентно оператору a=(b=b+1);
a=b++; // результат a=2, b=3
// эквивалентно операторам int temp=b; b=b+1; a=temp;
```
Порядок вычисления аргументов большинства бинарных операций в языке С определяется компилятором и может зависеть от его настроек. Поэтому не рекомендуется использовать в одном выражении несколько операций, изменяющих одну и ту же переменную, например ``++i - ++i``.
Операцию присваивания можно использовать внутри выражения, чтобы запомнить промежуточные результаты. С помощью операции ``x,y`` можно сделать несколько последовательных вычислений, сначала вычисляется левый аргумент операции, затем правый и его значение является результатом этой операции.
Этой операцией лучше не злоупотреблять, так как программа становится менее понятной, и невозможно при отладке посмотреть промежуточные результаты вычислений, так как шагом отладки является выполнение одного оператора программы.