Лекция 5: Операции, инструкции и выражения
"Главное, что я открыл в своей жизни - это бутылка светлого." - Христофор Колумб
Основные определения
- Операция – элементарное действие по обработке данных (по работе с переменными).
- Операнд – переменная, константа или выражение, участвующее в операции.
- Унарная операция – операция с одним операндом.
- Бинарная операция – операция с двумя операндами.
- Тернарная операция – операция с тремя операндами.
- Выражение – последовательность операций и их операндов, результат одной операции может быть операндом другой.
- Оператор (англ. statement) – часть программы, определяющая выполняемое действие.
Виды операций
- Унарные операции:
+
,-
,++
,--
,*
,&
,!
,~
,sizeof
. - Бинарные операции:
+
,-
,*
,/
,%
,<<
,>>
,&
,|
,^
,&&
,||
,==
,!=
,<
,>
,<=
,>=
,=
,+=
,-=
,*=
,/=
,%=
,<<=
,>>=
,&=
,|=
,^=
. - Тернарная операция: условная операция
?:
.
Приоритет и порядок выполнения операций
- Приоритет операций: операции разбиты на 15 групп по приоритетам, от самого высокого (ранг 1) до самого низкого (ранг 15).
- Ассоциативность:
- Большинство операций выполняются слева направо.
- Исключения — унарные операции, операции присваивания и тернарная операция
?:
, которые выполняются справа налево.
- Для изменения порядка выполнения операций используются круглые скобки.
Арифметические операции
+
– сложение-
– вычитание*
– умножение/
– деление (результат целочисленного деления округляется к нулю)%
– остаток от деления (знак результата соответствует знаку делимого)
Примеры:
int a = 5, b = 3;
printf("a / b = %d\n", a / b); // Вывод: 1
printf("a %% b = %d\n", a % b); // Вывод: 2
Инкремент и декремент
++
– увеличение на 1 (инкремент)--
– уменьшение на 1 (декремент)
Операции имеют две формы:
Префиксная
: сначала изменяется значение операнда, затем используется результат.Постфиксная
: сначала используется значение операнда, затем оно изменяется.
Примеры:
int a = 2;
printf("%d\n", a++); // Вывод: 2
printf("%d\n", ++a); // Вывод: 4
Операции сравнения и логические операции
Операции сравнения
<
– меньше>
– больше<=
– меньше или равно>=
– больше или равно==
– равно!=
– не равно
Результат операций сравнения — целое число: 1 (истина) или 0 (ложь).
Пример:
int x = 5, y = 10;
printf("%d\n", x < y); // Вывод: 1
Логические операции
&&
– логическое И||
– логическое ИЛИ!
– логическое НЕ
Логические операции применяются к целочисленным значениям: 0 считается ложью, любое ненулевое значение — истиной.
Пример:
int a = 1, b = 0;
printf("%d\n", a && b); // Вывод: 0
printf("%d\n", a || b); // Вывод: 1
Поразрядные операции
&
– поразрядное И|
– поразрядное ИЛИ^
– поразрядное исключающее ИЛИ~
– поразрядное отрицание<<
– сдвиг влево>>
– сдвиг вправо
Пример:
int a = 5, b = 2;
printf("%d\n", a & b); // Вывод: 0
printf("%d\n", a | b); // Вывод: 7
printf("%d\n", a << b); // Вывод: 20
Операции присваивания
- Простое присваивание:
=
- Составные операции присваивания:
+=
,-=
,*=
,/=
,%=
,<<=
,>>=
,&=
,|=
,^=
Примеры:
int a = 10;
a += 5; // Эквивалентно a = a + 5
printf("%d\n", a); // Вывод: 15
Преобразование типов
Явное преобразование
Преобразование выполняется программистом с помощью записи (тип) выражение
.
Пример:
int a = 5, b = 2;
float c = (float)a / b;
printf("%f\n", c); // Вывод: 2.500000
Неявное преобразование
Компилятор автоматически преобразует операнды к общему типу в порядке увеличения их "размера памяти".
Пример:
int a = 5;
double b = 2.0;
printf("%f\n", a + b); // Вывод: 7.000000
Работа с указателями и массивами
Операции с указателями
&
– получение адреса*
– разыменование указателя
Пример:
int a = 10;
int *p = &a;
printf("%d\n", *p); // Вывод: 10
Индексация массива
Пример:
int arr[5] = {1, 2, 3, 4, 5};
printf("%d\n", arr[2]); // Вывод: 3
Операция запятая
Операция запятая выполняет несколько выражений последовательно и возвращает значение последнего выражения.
Пример:
int a, b;
a = (b = 3, b + 2);
printf("%d\n", a); // Вывод: 5
Оператор for с несколькими выражениями
Пример:
for (int i = 0, j = 10; i < j; i++, j--) {
printf("%d %d\n", i, j);
}
Пример программы
Программа для вычисления куба и десятой степени числа:
#include <stdio.h>
int main() {
int x, x2, x3, x5, x10;
printf("Введите значение X: ");
scanf("%d", &x);
x2 = x * x;
x3 = x * x2;
x5 = x2 * x3;
x10 = x5 * x5;
printf("%d в 3-й степени = %d\n", x, x3);
printf("%d в 10-й степени = %d\n", x, x10);
return 0;
}
Замечание
Warning
При использовании операций преобразования типов следует быть внимательным, так как возможна потеря данных.