1 / 22

Лекция 3

Лекция 3. Выражения. Именующее выражение ( lvalue ). Объект – некоторая непрерывная область памяти. Переменная – именованная область памяти, т.е. переменная – это объект. Именующее выражение ( lvalue – left value) выражение, ссылающееся на объект.

quon-soto
Télécharger la présentation

Лекция 3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Лекция 3 Выражения

  2. Именующее выражение (lvalue) Объект – некоторая непрерывная область памяти. Переменная – именованная область памяти, т.е. переменная – это объект. Именующее выражение (lvalue – left value)выражение,ссылающееся на объект. Имя переменной – тоже именующее выражение.

  3. Соглашение о понятиях Оператор – встроенная функция языка со специальным синтаксисом Бинарный оператор: операнд1 оператор операнд2 Унарный оператор: оператор операнд операнд оператор Виды операндов: expr (выражение, семантика значения) lvalue(выражение в левой части оператора присваивания,семантика переменной)

  4. Арифметические операторы +exprУнарный плюс expr+exprСложение -exprУнарный минус expr-expr Вычитание expr*exprУмножение expr/expr Деление

  5. Целочисленные операторы expr%expr Целочисленный остаток expr<<exprПобитовый сдвиг влево expr>>exprПобитовый сдвиг вправо x x << 1 x >> 1

  6. Битовые операторы expr|exprПобитовое ИЛИ expr&expr Побитовое И expr^expr Побитовое исключающее ИЛИ ~expr Дополнение (инвертирование всех бит) Установить третийбит n | (1 << 2 ) Сбросить третий бит n &~(1 << 2)

  7. Логические операторы expr||exprЛогическое ИЛИ expr&&expr Логическое И !expr Логическое отрицание

  8. Логические и битовые операторы • Битовое И 3& 12 = 0 (false) • Логическое И 3&& 12 = true

  9. Операторы сравнения expr==exprРавенство expr!=expr Неравенство expr<expr Меньше expr>expr Больше expr<=expr Меньше или равно expr>=expr Больше или равно

  10. Присваивание Простое присваивание lvalue=expr Составные присваивания lvalue *= exprlvalue /= exprlvalue %= expr lvalue += exprlvalue -= expr lvalue &= exprlvalue |= exprlvalue ^= expr lvalue <<= exprlvalue >>= expr

  11. Операторы инкремента и декремента Префиксный инкремент ++lvalueУвеличивает значение объекта --lvalueна 1 и возвращает объект Постфиксный инкремент lvalue++Увеличивает значение объекта lvalue--на 1 и возвращает старое значение

  12. Оператор запятая Формат expr,expr Результат expr1, expr2 → expr2 Ассоциативность левая: expr1, expr2, expr3 → (expr1, expr2), expr3 → expr2,expr3 → expr3

  13. Тернарный оператор Формат expr1 ? expr2 : expr3 Результат: Если условие expr1 истинно, то результатом оператора является второй операнд (expr2), в противном случае третий операнд (expr3) Пример: char first = is_letter (x) ? ‘a’ : ‘0’ ;

  14. Результат операторов Результат арифметических операторов – «наибольший» по вместительности тип операндов. При равных размерах типа операндов unsignedсчитается «большим» чем signed. Значения типов boolи char, как операнды арифметических операторов, приводятся к типу intдо вычисления. Унарные операторы не меняют «знаковость» типа, но меняют значение. 9/ 5 ; // 1, тип int 9 / 5. ; // 1.8, тип double -5 ; // -5, тип int -5U ; // 4294967291, тип unsigned int unsigned short s = 5 ; 3 - 5U ; // 4294967294, тип unsigned int 3 – s ; // -2, тип int

  15. Результат операторов Результатом применения логических операторов ==,!=,<,>,<=,>=,&&,|| является значение логического типа (bool). Результатом операторов присваивания и префиксного инкремента/декремента является lvalue. Там, где это возможно с точки зрения логики, если операндомявляется lvalue, то результатом тоже будет lvalue. 9 == 7 ; // false 0 <= a <= 5 ; // Ошибка! true <= 5 при любых a 0 <= a && a <= 5 ; // Теперь запись верна int a(0), b(1); (a, b) = 7 ; // b = 7, оператор , вернет lvalue b (true ? a : b ) = 9 ; // a = 9, оператор ?: вернет lvalue a a++++ ; // Ошибка! a++ - не lvalue ++++b ; // b += 2, т.к. ++b - lvalue

  16. Ассоциативность Унарные операторы и операторы присваивания – правоассоциативны. Все остальные – левоассоциативны. означает --- b -(-(-b)) означает a = b = c a = (b = c) означает a – b + c (a – b) + c означает a / b * c (a / b) * c

  17. Последовательность вычислений Порядок вычислений в общем случае не определен! Для выражения неизвестно, что вызовется первым. Исключение: Для операторов ,(запятая),&& (логическое И) и||(логическое ИЛИ) левый операнд вычисляется раньше правого. n = f(7) + g(9);

  18. Правило быстрого вычисления Если для логического оператора &&или ||после вычисления значения первого операнда результат однозначен, значение второго операнда не вычисляется. Примеры f() не вызывается f() не вызывается g() вызывается, если f() ложно true || f(); false && f(); f() || g();

  19. Приоритет операторов

  20. Приоритет операторов

  21. Приоритет операторов

  22. Приоритет операторов

More Related