Skip to content

Лекція 10. Як комп’ютер додає двійкові числа

Лекція 10. Як комп’ютер додає двійкові числа

Section titled “Лекція 10. Як комп’ютер додає двійкові числа”

Рівень 2: Архітектор логіки

Марко, сьогодні ми не просто вивчимо новий термін — ми відкриємо ще один шар того, як насправді працює комп’ютер.

Що ми сьогодні розкриємо

Section titled “Що ми сьогодні розкриємо”
  • навчитися виконувати просте двійкове додавання
  • побачити перенесення між розрядами
  • зв’язати двійкову арифметику з роботою процесора на концептуальному рівні

Зв’язок з попередніми лекціями

Section titled “Зв’язок з попередніми лекціями”

У цій лекції ми використаємо знання про двійкову систему з лекції 2, щоб навчитися виконувати двійкове додавання.

Правила двійкового додавання дуже короткі

Section titled “Правила двійкового додавання дуже короткі”

У десятковій системі ти знаєш: 9 + 1 = 10, тому виникає перенос. У двійковій цифр лише дві, тому перенос з’являється вже при 1 + 1.

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 ← пишемо 0, переносимо 1
1 + 1 + 1 = 11

Наприклад:

101 (5)
+ 011 (3)
-----
1000 (8)

Спочатку праві біти: 1+1=10, пишемо 0 й переносимо 1. Потім середній розряд: 0+1+перенос=10. Потім 1+0+перенос=10. Останній перенос стає новою одиницею зліва.

Процесор будує складне з простого

Section titled “Процесор будує складне з простого”

Реальні процесори виконують арифметику електронними логічними схемами. Ми не будемо конструювати транзисторний суматор, але важлива інженерна ідея така: дуже складні обчислення складаються з величезної кількості маленьких, чітких операцій.

Це схоже на LEGO: окрема цеглинка проста, але з мільйонів цеглинок можна побудувати космічний корабель.

0011 + 0010 = 0101, тобто 3 + 2 = 5.

0111 + 0001 = 1000, тобто після 7 двійково приходить 8.

Можна перевіряти себе Python: bin(0b101 + 0b11) поверне 0b1000. Тут 0b101 — число, записане прямо у двійковій формі.

Python-лабораторія: перевіряємо ручні обчислення

Section titled “Python-лабораторія: перевіряємо ручні обчислення”
pairs = [
(0b0011, 0b0010),
(0b0101, 0b0011),
(0b0111, 0b0001),
]
for a, b in pairs:
print(bin(a), "+", bin(b), "=", bin(a + b), "=", a + b)

Спочатку кожну суму порахуй на папері, а вже потім запускай код.

Виконай місію по черзі. Якщо щось не виходить — спочатку перечитай приклад вище й спробуй знайти, на якому кроці результат відрізняється.

  1. на папері обчисли 0010 + 0011, 0101 + 0010, 0110 + 0011
  2. перевір усі три відповіді Python-кодом
  3. для кожного прикладу також переведи числа в десяткову систему
  4. намалюй стрілками, де виникає перенос у прикладі 0111 + 0001
  5. поясни, чому 1 + 1 у двійковій системі записується 10
  • Які чотири базові правила двійкового додавання?
  • Куди рухається перенос?
  • Скільки в десятковій системі 1000₂?
  • Що означає 0b перед числом у Python?
  • Яку загальну інженерну ідею показує двійкове додавання?
  • Перенос — одиниця, яка переходить у сусідній більший розряд, коли сума не вміщується в один.
  • Розряд — позиція в числі зі своєю вагою (одиниці, двійки, четвірки…).
  • Двійкова арифметика — правила додавання чисел, записаних 0/1.
  • Суматор — електронна схема, яка додає двійкові числа; основа для складніших обчислень.
  • Транзистор — маленький електронний «перемикач», з яких будуються логічні схеми процесора.

Чек-лист перед наступною лекцією

Section titled “Чек-лист перед наступною лекцією”
  • Чи можеш ти пояснити, як відбувається додавання двійкових чисел?
  • Чи знаєш ти, що таке перенос (carry) при додаванні?
  • Чи розумієш ти, як транзистори реалізують логічні операції?

Що потрібно винести з лекції

Section titled “Що потрібно винести з лекції”
  • двійкове додавання працює за тими самими позиційними принципами, що й десяткове
  • перенос виникає, коли сума не вміщується в один двійковий розряд
  • складні обчислення комп’ютера будуються з простих операцій

Хакерський принцип: не запам’ятовуй магічні слова. Намагайся пояснити своїми словами, що відбулося і чому.