- •Лекция 4 Операции и выражения
- •Понятие выражения и операции
- •Классификация операций
- •Приоритеты (ранги) операций
- •Арифметические операции
- •Примеры использования арифметических операций Выделение цифр в целом числе
- •Выделение цифр в вещественном числе
- •Арифметические операции над переменными символьного типа
- •Операции инкремента и декремента
- •Особенности выполнения операций инкремента и декремента
- •Операции присваивания
- •Примеры использования
- •Операции отношения
- •Логические операции
- •Особенности выполнения логических операций
- •Примеры использования логических операций
- •Логические выражения и примеры их записи
- •Поразрядные логические операции
- •Примеры выполнения поразрядных логических операций:
- •Операции поразрядного сдвига
- •Дополнительные операции Операции доступа к компонентам структурированного объекта
- •Операции доступа к адресуемым компонентам классов
- •Определение размера sizeof
- •Вызов функции ( )
- •Индексация [ ]
- •Операция запятая ,
- •Операция расширения области видимости ::
- •Преобразование типа
- •Правила преобразования типов
- •Примеры преобразования типов
- •2. Особенности преобразования типов int и double:
- •7. Проанализируйте преобразование типов в операторах присваивания:
- •8. Приведение типа в случае использования указателей:
- •9. Преобразование старшего типа к младшему удобно использовать для выделения отдельных частей переменной или константы:
- •10. С помощью приведения типа можно получить дробную часть числа:
- •Программирование вычисления алгебраических выражений
- •Определение первого символа вводимого значения
- •Контроль правильности ввода значения переменной
- •Основные встроенные (стандартные) функции
- •Пример вычисления по формуле
- •Замечания по программированию алгебраических выражений
- •Особенности представления чисел по двоичному основанию*
- •Особенности выполнения арифметических операций над вещественными числами*
- •Операции умножения и деления
- •Операции сложения и вычитания
- •Особые ситуации Ошибки округления
- •Ошибки переполнения
- •Потеря (исчезновение) порядка
- •Катастрофическая потеря порядка
- •Потеря значащих цифр
- •Особенности выполнения операций отношения (сравнения)
- •Обратить внимание
- •Правила работы с данными вещественных типов
Логические операции
Логические операции выполняются в С++, как и в других языках программирования, согласно таблице (см. Таблица значений логических операций). Операнды должны быть скалярного типа (арифметического, перечислимого, указатели, ссылки).
Таблица 6.1. Значения логических операций
-
A
B
&&
||
!B
0
0
0
0
1
0
1
0
1
0
1
0
0
1
1
1
1
1
1
0
Логические операции (как и операции отношения) используются при формировании логических выражений, имеющих только два значения: истина или ложь. Логические выражения наиболее часто используются вместе с операторами управления потоком вычислений – операторами ветвлений и циклов.
операция |
содержание |
&& логическое умножение |
e1 && e2 истина, если e1 и e2 – истина; схема работы - короткая: e1 истина e2
|
|| логическое сложение |
e1 || e2 истина, если e1 или e2 – истина; схема работы - короткая: e1 ложь e2
|
! логическое отрицание |
!e1 истина, если e1 – ложно
|
приоритеты: ! (самый высокий) && || |
a > b && b > c || b > d 1 2 3 4 5 |
схема вычисления: короткая |
if ((i++ < k) && (j++ > l)) вторая скобка выполняется не всегда |
Особенности выполнения логических операций
Компилятор С++ поддерживает короткую схему анализа логического выражения: логическое выражение анализируется слева направо до тех пор, пока не станет очевидным его значение (истина или ложь). После этого дальнейший анализ выражения прекращается, так как значение его уже известно. Например:
-
При х =1, y =2 значение выражения (x < 2) || (y+x < 5) равно true, что очевидно уже после вычисления первого операнда. Поэтому второй операнд даже не будет вычисляться.
-
При x =1, y =2 значение выражения (x > 5) && (y+x > 2) равно false, что очевидно уже после вычисления первого операнда, и второй операнд можно не вычислять. Понимание этого факта на самом деле имеет иногда очень важное значение.
-
Например, при вычислении выражения (++x || ++y && ++z) и при х=2 не произойдет изменения значений y и z, т.к. первый операнд имеет значение true и по нему можно сделать вывод о значении всего выражения, независимо от значения его второй части (++y && ++z).