Карточка 11. Числа имеют границы
Паспорт концепта
- Уровни: 8 «8-битный Сумматор» (25 мин), 14 «АЛУ» (40 мин), 25 «Флаги и доп. код» (30 мин), 41 «Многофайловый проект» (35 мин). Части 1–3, карточка сквозная.
- Суммарно: ~130 минут игры. Уровни проходятся в своё время; карточка собирает их в одну линию разговора о границах чисел.
- Результаты обучения: ученик понимает, что 8 бит кодируют диапазон, и умеет различать перенос (выход за 0–255) и переполнение знака (выход за −128…127); объясняет дополнительный код и условный переход по флагам.
- Гайды: ур. 8, ур. 14, ур. 25, ур. 41.
План занятия на 45 минут
Занятие ставится после уровня 25 (флаги); уровни 8 и 14 к этому моменту пройдены, 41 — впереди.
- 0–10 мин. Разминка: одометр автомобиля проехал 999 и прибавил 1. Что показал счётчик? Ноль. Был ли это «правильный» ответ? В каких условиях да.
- 10–25 мин. Три вектора уровня 8 на доске: 127+1 (Sum=128, Carry=0), 200+100 (Sum=44, Carry=1), 255+1 (Sum=0, Carry=1). Класс объясняет каждый: кто из них «сломался» и для каких чисел.
- 25–35 мин. Дополнительный код: 8 бит как −128…127. Почему 10000000₂ — это −128, а не «отрицательный ноль»? Проверьте: −128 + 1 = −127 = 10000001₂.
- 35–45 мин. Флаги из уровня 25: как программа узнаёт о переполнении и что делает условный переход. Домой: проверить 5−10=251 в песочнице и объяснить результат.
Вопросы для обсуждения
- Сколько разных чисел помещается в 8 бит? Почему в одном и том же байте живут и 0…255, и −128…127?
- 127+1 даёт Carry=0, но результат «странный» для знаковых чисел. Что именно произошло со старшим битом?
- 200+100 даёт Sum=44 и Carry=1. Кто из выходов «виноват» и перед кем?
- Придумайте правило из двух пунктов: когда схема сообщает о переносе и когда о переполнении знака. (Опорный факт: переполнение знака — когда слагаемые одного знака, а результат другого.)
- В песочнице 5−10 даёт 251. Почему это «правильный минус 5»? Покажите через доп. код.
- Многофайловый проект уровня 41 хранит библиотеку модулей. Почему число 255 в тестах ROM записано как 8'b11111111, а не просто 255?
Ожидаемые ошибки
Список собран из неверных вариантов концепт-чеков и подсказок уровней; по мере накопления телеметрии он будет уточняться по реальной доле верных ответов с первой попытки.
- Ученик говорит: «нужно 9 битов для переноса, схема сломалась». Реакция: схема исправна и сообщает переносом ровно то, что происходит. Ошибка не в железе, а в предположении, что результат обязан влезть.
- Ученик говорит: «старший FullAdder сломался, он выдал не тот бит». Реакция: прогоните тот же вектор через 16-битный сумматор — поведение то же. Это свойство диапазона, а не дефект разряда.
- Ученик считает, что Carry=0 гарантирует правильный результат. Реакция: 127+1 — контрпример для знаковых чисел: перенос не случился, а диапазон нарушен.
- Ученик путает 251 и −5. Реакция: один и тот же байт; вопрос в договорённости. Покажите правило: значение ≥ 128 в доп. коде — отрицательное, −(256 − значение).
- Ученик пишет «отрицательный ноль» для 10000000₂. Реакция: в доп. коде есть один ноль; 10000000₂ занято самым маленьким числом −128. Проверка: сложите его с 1.
Критерии оценки
- Собрал. Уровни 8, 14, 25 закрыты; 41 закрыт с зелёными тестами.
- Собрал и объяснил. Объясняет все три вектора разминки, переводит 251 в −5 и обратно, отвечает на вопросы 1, 2, 5.
- Перенёс на новую задачу. Сформулировал правило из вопроса 4 своими словами и применил его к новому примеру (например, −100 − 100) или выполнил задачу для сильных.
Задача для сильных
В песочнице соберите 8-битную схему, которая отличает знаковое переполнение от обычного переноса: на входе два числа и операция, на выходе два флага — Carry и Overflow. Проверьте её на векторах 127+1, 200+100, 255+1, −100−100.
Парная работа
Проектировщик вычисляет вектор столбиком на бумаге и заполняет таблицу «Sum, Carry, знак результата»; проверяющий решает тот же вектор через доп. код (десятично) и сверяет ответы до запуска «Проверить». Спорные случаи разрешаются песочницей, а не авторитетом. Смена ролей — на каждом новом векторе.