Перейти к содержанию

Лекция 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

При использовании операций преобразования типов следует быть внимательным, так как возможна потеря данных.


Help Me I Am In Hell