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


Язык программирования Си поддерживает все основные арифметические операции. Эти операции производятся над числами. Значения, которые участвуют в операции, называются операндами. Список имеющихся в Си операций:

+

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

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main(void)
{
int a = 67;
int b = 33;
int c = a + b + 7;
printf("a + b + 7 = %d \n", c); // 107
return 0;
}
-

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

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main(void)
{
int a = 67;
int b = 33;
int c = a - b;
printf("a - b = %d \n", c); // 34
return 0;
}
*

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

1
int c = 15 * 3; // 45
/

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

1
2
int a = 15 / 3; // 5
float d = 34.0 / 3.0; // 11.333333
При делении стоит быть внимательным, так как если в операции участвуют два целых числа, то результат деления будет округляться до целого числа, даже если результат присваивается переменной float:

1
2
float a = 10 / 4;
printf("a = %f \n", a); // 2.0
Результат представлял вещественное число, один из операндов также должен представлять вещественное число:

1
2
float a = 10.0 / 4;
printf("a = %f \n", a); // 2.5
%

Возвращает результат деления двух чисел по модулю (получение остатка от деления):

1
int a = 35 % 3; // 2 (35 - 33 = 2)
Операции *, /, % имеют больший приоритет, чем + и - :

1
2
3
4
int a = 8;
int b = 7;
int c = a + 5 * b; // 43
printf("c = %d \n", c); // 43
Здесь результатом будет число 43:

5 * b = 35

a + 35 = 43

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

1
2
3
int a = 8;
int b = 7;
int c = (a + 5) * b; // 43
Здесь результатом будет число 91:

a + 5 = 13

13 * b = 91

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

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

1
2
3
4
int a = 8;
int b = ++a;
printf("a = %d \n", a); // 9
printf("b = %d", b); // 9
Постфиксный инкремент (x++). Увеличивает значение переменной на единицу, но значением выражения x++ будет то, которое было до увеличения на единицу:

1
2
3
4
int a = 8;
int b = a++;
printf("a = %d \n", a); // 9
printf("b = %d", b); // 8
Префиксный декремент (--x). Уменьшает значение переменной на единицу, и полученное значение используется как значение выражения --x

1
2
3
4
int a = 8;
int b = --a;
printf("a = %d \n", a); // 7
printf("b = %d", b); // 7
Постфиксный декремент (x--). Уменьшает значение переменной на единицу, но значением выражения x-- будет то, которое было до уменьшения на единицу:

1
2
3
4
int a = 8;
int b = a--;
printf("a = %d \n", a); // 7
printf("b = %d", b); // 8
Рассмотрим более сложную ситуацию:

1
2
3
4
5
6
int a = 8;
int b = 7;
int c = a+++b;
printf("a = %d \n", a); // 9
printf("b = %d \n", b); // 7
printf("c = %d \n", c); // 15
Здесь операция трактуются таким образом, что вначале идет постфиксный инкремент, а потом сложение. То есть фактически так:

1
int c = (a++) + b;
Аналогично будет расцениваться выражения с постфиксным декрементом: int c = a---b;.