Лекция 2 | Парадигмы программирования (Стэнфорд)

YOUTUBE · 01.12.2025 08:48

Ключевые темы и таймкоды

Введение и раздаточные материалы

0:12
  • Презентация проводится Стэнфордским центром профессионального развития.
  • Приветствие и объявление о четырёх раздаточных материалах.
  • Упоминание о списках рассылки и предварительных заявках на веб-странице.

Цель лекции

1:18
  • Объяснение цели лекции: понимание механики низкоуровневой памяти.
  • Обсуждение представления данных в памяти: логические значения, целые числа, числа с плавающей запятой, структуры.
  • Подчёркивание важности понимания низкоуровневых аспектов для улучшения навыков программирования на C и C++.

Типы данных в C и C++

2:11
  • Обзор основных типов данных: bool, char, short, int, long, float, double.
  • Объяснение, как эти типы данных занимают место в памяти.

Байт и биты

4:49
  • Объяснение понятия бита как минимальной единицы памяти, способной различать два значения: 0 и 1.
  • Демонстрация работы битов в группе для представления байта.

Представление символов в памяти

7:10
  • Объяснение, как символы представляются в двоичной системе счисления.
  • Пример представления заглавной буквы «А» числом 65 в двоичной системе.
  • Разложение числа на суммы степеней двойки для понимания двоичного представления.

Представление коротких целых чисел

9:29
  • Объяснение использования коротких целых чисел для экономии памяти.
  • Пример представления числа 512 в двоичной системе с использованием битового шаблона.
  • Подчёркивание важности последовательного сопоставления битовых шаблонов с числами для корректной интерпретации компьютерным оборудованием.

Двоичная система счисления

11:05
  • Ноль, за которым следуют все единицы в двоичной системе, подобен нулю, за которым следуют все девятки в десятичной системе.
  • Это на единицу меньше идеального числа с большим количеством нулей в конце.
  • Пример с двоичным одометром иллюстрирует, как значения могут быть понижены до единицы при резервной копии.

Представление чисел

12:01
  • Число равно двум в пятнадцатой степени минус один.
  • Отрицательные числа важны для отображения, хотя они не так редки, как положительные.
  • Знаковый бит определяет знак числа: ноль для положительного, единица для отрицательного.

Двоичное сложение

13:49
  • Двоичное сложение похоже на десятичное с большим количеством переносов.
  • Важно, чтобы сложение и вычитание выполнялись по простым правилам.
  • Пример с добавлением единицы к четырёхразрядной величине иллюстрирует перенос единиц.

Проблема представления отрицательных чисел

14:51
  • Добавление положительного числа к отрицательному не всегда приводит к ожидаемому результату.
  • Необходимо сконструировать представление отрицательного числа так, чтобы при добавлении к положительному получались все нули.

Дополнение двух

18:00
  • Дополнение двух — это метод представления отрицательных чисел, который нарушает сложение.
  • Для получения отрицательного числа нужно инвертировать все биты и прибавить единицу к положительному числу.
  • Симметрия системы позволяет легко преобразовывать отрицательные числа в положительные.

Представление символов

19:41
  • Символы представлены как уникальные целые числа в таблице ASCII.
  • Левый бит используется для обозначения знака числа, а остальные биты — для величины.
  • Это позволяет представить столько же отрицательных чисел, сколько и положительных.

Пример кода

20:41
  • Переменная char ch устанавливается равной заглавной букве «A».
  • Переменная int i устанавливается равной ch.
  • Код демонстрирует преобразование символа в число и обратно.

Присвоение значений в C

22:01
  • Присвоение значения ch переменной s приводит к копированию битового шаблона.
  • Число 65 преобразуется из однобайтового в двухбайтовое представление.
  • Лишнее пространство заполняется нулями.

Пример с числом 67

23:33
  • Число 67 представлено как 111, что на два больше, чем 65.
  • Дополнительный байт заполняется нулями.
  • Программы используют материал, для которого нет места, для представления больших чисел.

Отрицательные числа и символы

25:13
  • Отрицательные значения плохо сочетаются с символами, так как большинство символов не имеют знака.
  • Длинные и средние значения равны четырём байтам.
  • Пример с коротким s и int i показывает, как битовый набор для числа преобразуется при присвоении.

Представление больших чисел

26:56
  • Четырехбайтовое целое число может представлять большие числа.
  • Битовая схема для четырёхбайтового числа включает множество нулей.
  • Присвоение четырёхбайтового числа короткому s приводит к копированию битового шаблона.

Отрицательная единица

29:49
  • Короткое s, равное отрицательной единице, представлено всеми единицами.
  • Добавление положительной единицы к отрицательной создаёт эффект домино, добавляя нули.
  • Синусоидальное расширение числа используется для представления отрицательных значений.

Концепция двоичного представления

31:55
  • Короткие, целые и длинные символы имеют двоичное представление.
  • Двоичное представление отображается на экране как буквы алфавита.
  • Важно понять концепцию двоичного представления, а не запоминать конкретные значения.

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

33:02
  • Числа с плавающей точкой представлены четырьмя байтами.
  • Они могут содержать целые числа с десятичной дробью.
  • Представление чисел с плавающей точкой отличается от представления целых чисел.

Представление чисел с плавающей точкой

33:32
  • Обсуждение использования 32 битов для представления чисел.
  • Идея представления дробных частей чисел с плавающей точкой.
  • Пример использования битов для представления вклада от 2 до отрицательного первого числа.

Расширение представления дробных чисел

34:30
  • Переход от представления целых чисел и их половин к представлению четвертичных дробей.
  • Использование битов для представления вкладов от 2 до отрицательных чисел.

Представление числа пи

35:30
  • Пример использования оставшихся битов для приближения к числу пи.
  • Подчёркивание ограниченности памяти и невозможности идеального представления всех чисел.

Сложение чисел с плавающей точкой

36:25
  • Проверка работы сложения чисел с плавающей точкой.
  • Указание на то, что технически это разумный способ представления чисел.

Структура числа с плавающей точкой

37:35
  • Описание структуры числа: знак, целое число без знака, показатель степени.
  • Объяснение роли 23 битов в представлении показателя степени.

Диапазон показателя степени

39:46
  • Объяснение диапазона показателя степени от 128 до -127.
  • Возможность масштабирования числа в большую или меньшую сторону.

Преобразование целых чисел в числа с плавающей точкой

42:07
  • Пример преобразования целого числа 5 в число с плавающей точкой.
  • Различие между десятичным представлением числа 5 и его представлением в формате с плавающей точкой.
  • Необходимость вычисления нового битового шаблона при преобразовании.

Интерпретация числа 5

44:16
  • Интерпретация числа 5 как 1.25 * 2^2.
  • Выбор значений exp = 129 и xxx = 2 для представления числа 5.

Введение в тему

44:20
  • Обсуждение ожидания наличия единицы в определённых местах.
  • Упоминание о странности ситуации с номером 107.
  • Пример с переменной i, равной 37, и переменной f с плавающей точкой.

Анализ примера

45:14
  • Вычисление значения i и инициализация f.
  • Объяснение, что амперсанд i представляет адрес переменной int.
  • Введение в заблуждение системы, которая считает, что амперсанд указывает на плавающую точку.

Реакция системы

46:14
  • Биты остаются в своём первоначальном положении, система не меняет их.
  • Разыменование амперсанда i приводит к получению битового шаблона, соответствующего плавающей точке.
  • Результат: число, умноженное на два, равно -127.

Заключение по примеру

47:12
  • Объяснение, почему вывод f будет небольшим числом.
  • Подчёркивание надуманности примеров для лучшего понимания манипуляций с памятью.
  • Анонс написания реального кода в следующую среду.

Новый пример

48:10
  • Вычисление числа с плавающей точкой f, равного 70.
  • Назначение короткого значения s через амперсанд звёздочки от f.
  • Различие в размерах цифр и интерпретация амперсанда.

Анализ нового примера

49:12
  • Интерпретация амперсанда как указателя на короткое замыкание.
  • Копирование битового шаблона для инициализации s.
  • Уверенность в том, что значение s будет отличным от нуля.

Заключение

50:08
  • Анонс обсуждения парного разряда, структур и указателей в понедельник.
  • Обещание начать писать реальный код.