Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_4_Операции_и_выражения.doc
Скачиваний:
10
Добавлен:
05.11.2018
Размер:
660.99 Кб
Скачать

Лекция 4 Операции и выражения

Понятие выражения и операции 2

Классификация операций 3

Приоритеты (ранги) операций 5

Арифметические операции 7

Примеры использования арифметических операций 8

Выделение цифр в целом числе 8

Выделение цифр в вещественном числе 9

Арифметические операции над переменными символьного типа 9

Операции инкремента и декремента 10

Особенности выполнения операций инкремента и декремента 11

Операции присваивания 12

Примеры использования 14

Операции отношения 14

Логические операции 15

Особенности выполнения логических операций 16

Примеры использования логических операций 16

Логические выражения и примеры их записи 17

Поразрядные логические операции 20

Примеры выполнения поразрядных логических операций: 21

Операции поразрядного сдвига 24

Дополнительные операции 25

Операции доступа к компонентам структурированного объекта 25

Операции доступа к адресуемым компонентам классов 25

Определение размера sizeof 26

Вызов функции ( ) 26

Индексация [ ] 26

Операция запятая , 27

Операция расширения области видимости :: 27

Преобразование типа 27

Правила преобразования типов 28

Примеры преобразования типов 31

Программирование вычисления алгебраических выражений 35

Определение первого символа вводимого значения 36

Контроль правильности ввода значения переменной 36

Основные встроенные (стандартные) функции 37

Пример вычисления по формуле 38

Замечания по программированию алгебраических выражений 39

Особенности представления чисел по двоичному основанию* 40

Особенности выполнения арифметических операций над вещественными числами* 41

Операции умножения и деления 41

Операции сложения и вычитания 41

Особые ситуации 42

Ошибки округления 42

Ошибки переполнения 42

Потеря (исчезновение) порядка 42

Катастрофическая потеря порядка 42

Потеря значащих цифр 42

Особенности выполнения операций отношения (сравнения) 43

Обратить внимание 44

Правила работы с данными вещественных типов 45

Понятие выражения и операции

Выражения (помимо алфавита, лексем и разделителей) также относятся к базовым элементам языка и представляют самый нижний уровень конструкций языка программирования.

Выражением называется любая допустимая, записанная по определенным правилам и задающая определенное вычисление, последовательность операций, операндов и разделителей. Выражение есть правило для получения значения.

Операнды – информационные объекты программы, над которыми производятся действия; как правило, это выражение или один из его частных случаев – константа, переменная или обращение к функции (как частный случай, выражение может содержать только один операнд).

Операции – это специальные комбинации символов, специфицирующие действия по преобразованию различных величин. Один и тот же знак операции может употребляться в различных выражениях и по-разному интерпретироваться в зависимости от контекста. Для изображения операций часто используется несколько символов.

Примеры выражений:

(а+0.12)/6

x && y || !z

(t*sin(x) - 2./5)/(1+exp(cos(x)))

a=b=c

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

Выражения могут давать в результате: именующее (lvalue) выражение, указывающее на объект; значения переменных (rvalue-выражение); либо не давать никаких значений (например, вызов функции, которая не возвращает значение). В левой части оператора присваивания допустимы только модифицируемые lvalue. Модифицируемое lvalue – это идентификатор или выражение, связанный с объектом, доступным и допускающим изменение в памяти.

lvalue выражением может быть:

  • идентификатор переменной любого из следующих типов:

      • целочисленного

      • с плавающей точкой

      • указатель

      • структура (struct)

      • объединение (union)

  • выражение с индексом ([ ]), не являющееся само массивом

  • обращение к члену (–> или .)

  • выражение взятия значения (*) не являющееся массивом

  • любое lvalue в скобках

  • любое lvalue со спецификатором const (немодифицируемое l-value)

Примеры lvalue-выражений:

*Р, где Р – выражение, дающее непустой указатель;

a=1; b=a+b; если a и b – идентификаторы переменных целого типа (int a, b;).

Примеры rvalue-выражений:

a+b, поэтому запись типа a+b = a недопустима.

Кроме формирования результирующего значения, вычисление выражения может вызвать побочные эффекты.

Например, значением выражения z=3, z+2 будет 5, а в качестве побочного эффекта z примет значение 3.

В результате вычисления x < 0 ? x-- : x будет получено значение х, а в качестве побочного эффекта положительное значение х будет уменьшено на 1.

Результат вычисления выражения характеризуется значением и типом. Операции выполняются в соответствии с их приоритетами.

Порядок вычисления подвыражений внутри выражений не определен. Например, в выражении (sin(x+2) + cos(y+1)) нельзя считать, что обращение к синусу будет выполнено раньше, чем к косинусу, и что х+2 будет вычислено раньше, чем y+1.

В выражение могут входить операнды различных типов. В этом случае перед вычислениями выполняются преобразования типов по определенным правилам. Как мы увидим чуть позже, эти правила обеспечивают преобразование от более коротких типов в более длинные для сохранения значимости и точности. Преобразование может изменить внутреннее представление величины (преобразование целого числа в вещественноебез потери точности и наоборот, вещественного в целое, возможно с потерей точности) и может изменить только интерпретацию внутреннего представления (преобразование знакового в беззнаковое).

В языке С++ программист может расширить действие стандартных операций, выполнить их перегрузку (т.е. придать им новый смысл при работе с нестандартными для них операндами). Эту возможность мы рассмотрим позже.