Язык программирования Си поддерживает все основные арифметические операции. Эти операции производятся над числами. Значения, которые участвуют в операции, называются операндами. Список имеющихся в Си операций:
+
Операция сложения возвращает сумму двух чисел:
#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; }
-
Операция вычитания возвращает разность двух чисел:
#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; }
*
Операция умножения возвращает произведение двух чисел:
int c = 15 * 3; // 45
/
Операция деления двух чисел:
#include <stdio.h> int main(void) { int a = 15 / 3; // 5 float d = 34.0 / 3.0; // 11.333333 printf("a=%d \n", a); printf("d=%f \n", d); return 0; }
При делении стоит быть внимательным, так как если в операции участвуют два целых числа, то результат деления будет округляться до целого числа, даже если результат присваивается переменной float:
float f = 10 / 4; printf("f = %f \n", f); // 2.0
Чтобы результат представлял вещественное число, один из операндов также должен представлять вещественное число:
float f = 10.0 / 4; printf("f = %f \n", f); // 2.5
%
Возвращает результат деления двух чисел по модулю (получение остатка от деления):
int a = 35 % 3; // 2 (35 - 33 = 2)
Операции *, /, % имеют больший приоритет, чем + и - :
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
С помощью скобок мы можем переопределить порядок операций, сделав, чтобы операции с более низким приоритетом выполнялись до операций с более высоким приоритетом:
int a = 8; int b = 7; int c = (a + 5) * b; // 91
Здесь результатом будет число 91:
a + 5 = 13
13 * b = 91
Также в Си есть специальные унарные операции над одним числом: ++ (инкремент) и -- (декремент). Каждая из операций имеет две разновидности: префиксная и постфиксная.
Префиксный инкремент (++x). Увеличивает значение переменной на единицу и полученное значение используется как значение выражения ++x
int a = 8; int b = ++a; printf("a = %d \n", a); // 9 printf("b = %d", b); // 9
Постфиксный инкремент (x++). Увеличивает значение переменной на единицу, но значением выражения x++ будет то, которое было до увеличения на единицу:
int a = 8; int b = a++; printf("a = %d \n", a); // 9 printf("b = %d", b); // 8
Префиксный декремент (--x). Уменьшает значение переменной на единицу, и полученное значение используется как значение выражения --x
int a = 8; int b = --a; printf("a = %d \n", a); // 7 printf("b = %d", b); // 7
Постфиксный декремент (x--). Уменьшает значение переменной на единицу, но значением выражения x-- будет то, которое было до уменьшения на единицу:
int a = 8; int b = a--; printf("a = %d \n", a); // 7 printf("b = %d", b); // 8
Рассмотрим более сложную ситуацию:
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
Здесь операция трактуются таким образом, что вначале идет постфиксный инкремент, а потом сложение. То есть фактически так:
int c = (a++) + b;
Аналогично будет расцениваться выражения с постфиксным декрементом: int c = a---b;
.