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