Лекция 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
При использовании операций преобразования типов следует быть внимательным, так как возможна потеря данных.