Перейти к содержимому
Topos Uranos

Краткое содержание

Этот урок открывает третий раздел курса, посвящённый выражениям и их операторам. Он объясняет, для чего нужен раздел: научить строить выражения, значение которых можно предсказать с уверенностью, зная, какая операция выполняется первой, какого типа результат, какие у него побочные эффекты и какие выражения не имеют смысла; представляет четыре урока раздела и связывающую их нить, от целочисленной и вещественной арифметики до битов и математической библиотеки, через условия и каталог неопределённого поведения; напоминает то, что раздел считает известным из второго, а именно тип каждого значения, его пределы и его преобразования; формулирует задачу, которую решает раздел, задачу программы, которая компилируется без единого предупреждения и чьи ответы на шесть школьных вопросов все неверны, если вообще есть; и показывает, куда он ведёт, в следующих разделах и в курсе «Программирование на C++ II».

Цели обучения

  1. Описывать последовательность содержания раздела и объяснять, что каждый урок даёт уроку, который идёт за ним.
  2. Вспоминать необходимое из раздела 2 (целые и вещественные типы, их диапазоны значений, переполнение и преобразования) и при необходимости повторять это.
  3. Предвидеть на примере, что значение выражения зависит от правил вычисления (приоритета, типа операндов, порядка эффектов), которые не всегда совпадают с правилами школьной математики.
  4. Понимать, что ожидается уметь к концу раздела, и отличать это от того, что будет изучено в следующих разделах.

Входная проверка

Прежде чем проходить раздел, полезно определить исходный уровень. Эта проверка является самопроверкой: она не оценивается, и её единственная цель состоит в том, чтобы направить занятия. Первые четыре вопроса касаются того, что раздел считает известным из второго: целочисленного деления, записи в двоичной системе, беззнакового вычитания и знакового переполнения. Следующие шесть в порядке уроков касаются центральных идей раздела, и некоторые из них исходят из школьной математики или из элементарной логики. Никто не обязан пока отвечать на них верно, а в двух из них «пока не знаю» является честным ответом: каждый ответ, верный или нет, объясняет суть дела и называет урок, где она разбирается. Те же умения измеряются снова в конце, в уроке итогов.

Входная проверка

Перед началом раздела оцени свою отправную точку. Это короткая самопроверка: она не оценивается, а результат хранится только в твоём браузере.

  1. Вопрос 1Из предыдущих разделовПрограмма объявляет const double r{7 / 2}; и выводит r. Что появится на экране?

  2. Вопрос 2Из предыдущих разделовКак записать число 13 в двоичной системе восемью битами?

  3. Вопрос 3Из предыдущих разделовЧто выводит std::println("{}", 0u - 1); при 32-битном unsigned int?

  4. Вопрос 4Из предыдущих разделовПрограмма выполняет int count{std::numeric_limits<int>::max()};, а затем count = count + 1;. Что гарантирует стандарт о значении count?

  5. Вопрос 5Чему равны 2+3⋅42 + 3 \cdot 4 и (2+3)⋅4(2 + 3) \cdot 4?

  6. Вопрос 6Чему равны, по теореме о делении из математики, где остаток rr подчинён условию 0≤r<20 \leq r < 2, частное qq и остаток rr от деления −7-7 на 22?

  7. Вопрос 7Каково отрицание высказывания «идёт дождь, и холодно»?

  8. Вопрос 8Что выводит std::println("{}", 3 < 5);?

  9. Вопрос 9Чему равны a и b после int a{5}; и int b{a++ * 2};?

  10. Вопрос 10Что выводит std::println("{}", 2 ^ 3);?