- •Лекция 4 Операции и выражения
- •Понятие выражения и операции
- •Классификация операций
- •Приоритеты (ранги) операций
- •Арифметические операции
- •Примеры использования арифметических операций Выделение цифр в целом числе
- •Выделение цифр в вещественном числе
- •Арифметические операции над переменными символьного типа
- •Операции инкремента и декремента
- •Особенности выполнения операций инкремента и декремента
- •Операции присваивания
- •Примеры использования
- •Операции отношения
- •Логические операции
- •Особенности выполнения логических операций
- •Примеры использования логических операций
- •Логические выражения и примеры их записи
- •Поразрядные логические операции
- •Примеры выполнения поразрядных логических операций:
- •Операции поразрядного сдвига
- •Дополнительные операции Операции доступа к компонентам структурированного объекта
- •Операции доступа к адресуемым компонентам классов
- •Определение размера sizeof
- •Вызов функции ( )
- •Индексация [ ]
- •Операция запятая ,
- •Операция расширения области видимости ::
- •Преобразование типа
- •Правила преобразования типов
- •Примеры преобразования типов
- •2. Особенности преобразования типов int и double:
- •7. Проанализируйте преобразование типов в операторах присваивания:
- •8. Приведение типа в случае использования указателей:
- •9. Преобразование старшего типа к младшему удобно использовать для выделения отдельных частей переменной или константы:
- •10. С помощью приведения типа можно получить дробную часть числа:
- •Программирование вычисления алгебраических выражений
- •Определение первого символа вводимого значения
- •Контроль правильности ввода значения переменной
- •Основные встроенные (стандартные) функции
- •Пример вычисления по формуле
- •Замечания по программированию алгебраических выражений
- •Особенности представления чисел по двоичному основанию*
- •Особенности выполнения арифметических операций над вещественными числами*
- •Операции умножения и деления
- •Операции сложения и вычитания
- •Особые ситуации Ошибки округления
- •Ошибки переполнения
- •Потеря (исчезновение) порядка
- •Катастрофическая потеря порядка
- •Потеря значащих цифр
- •Особенности выполнения операций отношения (сравнения)
- •Обратить внимание
- •Правила работы с данными вещественных типов
Классификация операций
Операции в С++ классифицируют по числу участвующих в них операндов или по типу действия, которое они выполняют.
При классификации по числу участвующих в них операндов операции подразделяют на:
первичные:
-
( ) – операция, определяющая порядок выполнения операций, ограничивающая список аргументов от имени функции в вызове функции, использующаяся при образовании составных объектов;
-
[] – операция индексации – используется как при определении массивов, так и для обращения к определенным элементам массива; первичное выражение в этой операции – имя массива, которое является адресом первого элемента массива;
-
. – операция доступа к элементу структуры по имени;
-
– операция доступа к элементу структуры по указателю.
На основе первичных операций строятся первичные выражения; в общем случае первичное выражение является исходным элементом любого выражения;
к первичному выражению относятся:
-
константа (целая, вещественная, символьная, строковая, перечислимая);
-
имя (имя переменной, имя_функции_операции – вводится в связи с перегрузкой операций, имя_функции_приведения – как компонента класса, ~имя_класса (обращение к деструктору));
-
(выражение) – произвольное выражение, заключенное в скобки; например, обращение к функции или имя составного объекта (int (*p)[10]);
-
::идентификатор, где :: – операция указания области видимости;
-
::имя_функции-операции, ::квалифицированное_имя, this – это представители первичных выражений, смысл которых станет ясен при рассмотрении классов и объектов;
унарные, выполняющие действия только над одним операндом:
& – операция получения адреса операнда,
* – операция обращения по указателю (операция разыменования), доступа по адресу к значению того объекта, на которое указывает операнд; операндом должен быть адрес (указтель),
- – унарный минус, операция изменения знака,
+ – унарный плюс, введен для симметрии с унарным минусом,
~ – поразрядное инвертирование внутреннего двоичного кода целочисленного аргумента (побитовое отрицание),
! – логическое отрицание (НЕ) значения операнда (0 – ложь, ≠0– истина; !0 равно 1; !(-3) равно 0; !1 равно 0),
++ – увеличение на 1 (инкремент или автоувеличение) значения операнда; префиксная форма операции – увеличение значения операнда на 1 до использования его значения; постфиксная форма операции – увеличение значения операнда на 1 после использования его значения; операнд не может быть константой или произвольным выражением, а только модифицируемым леводопустимым выражением,
-- – уменьшение на 1 (декремент или автоуменьшение) значения операнда; префиксная форма операции – уменьшение значения операнда на 1 до использования его значения; постфиксная форма операции – уменьшение значения операнда на 1 после использования его значения; операнд не может быть константой или произвольным выражением, а только модифицируемым леводопустимым выражением,
throw – операция генерации исключения,
typeid – операция определения типа операнда: typeid (выражение) – для идентификации на этапе компиляции типа значения выражения; typeid (имя_типа) – для идентификации типа на этапе компиляции программы;
(тип) – операция преобразования (приведения) типов; не изменяя самого операнда, операция преобразует его значение к типу, обозначение которого помещено в скобках; (long)1 – внутреннее представление имеет длину 4 байта; (char)1 – внутреннее представление имеет длину 1 байт; (float)1 – внутреннее представление имеет длину 4 байта и изменяется структура внутреннего представления; при преобразовании вещественного значения к целочисленному типу возможна ошибка при выходе полученного значения за диапазон допустимых значений для целых и результат зависит от реализации,
тип () – функциональная форма преобразования типа; может использоваться только в тех случаях, когда тип имеет простое (несоставное) наименование,
dynamic_cast – операция приведения типов с проверкой допустимости приведения во время выполнения кода программы,
static_cast – операция приведения типов (обычно «родственных») с проверкой допустимости приведения во время компиляции,
reinterpret_cast – операция приведения типов без проверки допустимости приведения во время выполнения кода программы,
const_cast – операция приведения типов, которая аннулирует действие модификатора const ,
sizeof() – операция вычисления в байтах размера памяти операнда; sizeof (выражение) или sizeof (тип),
:: – унарная операция изменения (указания, разрешения) области видимости, операция указания контекста, позволяет получить из тела функции доступ к внешнему для функции объекту (например, к переменной),
new – операция для динамического выделения памяти,
delete – операция для освобождения динамически выделенной памяти.
бинарные, требующие для выполнения два операнда; в эту группу входит большинство операций;
тернарные – тройная условная операция ?:.
По типам выполняемых действий операции подразделяют на:
-
арифметические
+ - * / % - (изменение знака)
увеличения и уменьшения
++ --
присваивания
= *= /= %= += -= <<= >>= &= | = ^=
отношения
< <= > >= == !=
логические
&&(и) ||(или) !(не)
поразрядные логические и сдвига
& | ^ ~ << >>
адресные
& *
дополнительные
?: , ( ) [ ] . * .* sizeof (тип) ::