- •Лекция 4 Операции и выражения
- •Понятие выражения и операции
- •Классификация операций
- •Приоритеты (ранги) операций
- •Арифметические операции
- •Примеры использования арифметических операций Выделение цифр в целом числе
- •Выделение цифр в вещественном числе
- •Арифметические операции над переменными символьного типа
- •Операции инкремента и декремента
- •Особенности выполнения операций инкремента и декремента
- •Операции присваивания
- •Примеры использования
- •Операции отношения
- •Логические операции
- •Особенности выполнения логических операций
- •Примеры использования логических операций
- •Логические выражения и примеры их записи
- •Поразрядные логические операции
- •Примеры выполнения поразрядных логических операций:
- •Операции поразрядного сдвига
- •Дополнительные операции Операции доступа к компонентам структурированного объекта
- •Операции доступа к адресуемым компонентам классов
- •Определение размера sizeof
- •Вызов функции ( )
- •Индексация [ ]
- •Операция запятая ,
- •Операция расширения области видимости ::
- •Преобразование типа
- •Правила преобразования типов
- •Примеры преобразования типов
- •2. Особенности преобразования типов int и double:
- •7. Проанализируйте преобразование типов в операторах присваивания:
- •8. Приведение типа в случае использования указателей:
- •9. Преобразование старшего типа к младшему удобно использовать для выделения отдельных частей переменной или константы:
- •10. С помощью приведения типа можно получить дробную часть числа:
- •Программирование вычисления алгебраических выражений
- •Определение первого символа вводимого значения
- •Контроль правильности ввода значения переменной
- •Основные встроенные (стандартные) функции
- •Пример вычисления по формуле
- •Замечания по программированию алгебраических выражений
- •Особенности представления чисел по двоичному основанию*
- •Особенности выполнения арифметических операций над вещественными числами*
- •Операции умножения и деления
- •Операции сложения и вычитания
- •Особые ситуации Ошибки округления
- •Ошибки переполнения
- •Потеря (исчезновение) порядка
- •Катастрофическая потеря порядка
- •Потеря значащих цифр
- •Особенности выполнения операций отношения (сравнения)
- •Обратить внимание
- •Правила работы с данными вещественных типов
Арифметические операции над переменными символьного типа
Пример демонстрирует возможность выполнения арифметических операций над переменными символьного типа (прописные буквы переводятся в строчные):
#include <iostream>
#include <conio.h>
using namespace std;
int main() {
char n_reg, v_reg, c;
c='b' + '%' - '!'; //f
cout << c << endl; //102(код 'f') = 98(код 'b')+37(код '%')-33(код'!')
cout << "Input char \'A\' - \'Z\' " <<endl;
cin >> v_reg;
n_reg = v_reg+32; //32 – значение, на которое отдичаются коды //прописных и строчных латинских букв
cout << v_reg << " " << n_reg << '\n';
_getch();
return 0;
}
Операции инкремента и декремента
тип операции |
операция |
содержание |
примеры |
префиксная |
++x |
увеличение значения операнда на 1 до использования его значения |
a=1; q = 2* ++a; a=2; q=4 |
--x |
уменьшение значения операнда на 1 до использования его значения |
a=1; q = 2* --a; a=0; q=0 |
|
постфиксная |
x++ |
увеличение значения операнда на 1 после использования его значения |
a=1; q= 2*a++; q=2; a=2; |
x-- |
уменьшение значения операнда на 1 после использования его значения |
a=1; q= 2*a--; q=2; a=0 |
Примеры использования:
1. k = a + (i++) – d * (--j); равносильно выполнению операций в следующей последовательности:
--j; k=a + i – d * j; i++;
2. int i=2, j=0;
i++;
cout << i << endl; // 3
--i;
cout << i << endl; // 2
3.
int main()
{ float x=2;
x=++x*4; cout << x << endl; // 12
x=2;
x=x++*4; cout << x << endl; // 9
x=2;
x=--x*4; cout << x << endl; // 4
x=2;
x=x--*4; cout << x << endl; // 7
return 0;
}
4.
int main()
{
int var = 10;
cout << var << endl; // var = 10
var *= 2; // var = 20
cout << var-- << endl; // 20
cout << var << endl; // var = 19
return 0;
}
Правило:
-
при самостоятельном использовании префиксная и постфиксная операции выполняются одинаково (++k, k++);
-
в выражениях префиксная и постфиксная операции различаются:
-
в случае префиксной операции сначала изменяется значение переменной, перед которой стоит операция, а затем оно используется;
-
в случае постфиксной операции сначала используется старое значение переменной, после которой стоит операция, затем оно изменяется;
-
не применяют операции к переменной, которая входит в выражение более одного раза или присутствует более чем в одном аргументе функции (k=a/2 + 5 * (1 + a++); printf (“……..”, a, a*a++);).
-
операции применяют только к переменным, операнд не может быть константой;
-
операндом может быть только леводопустимое выражение: ++(j+k) – неверная запись.