ЛЕКЦІЯ 2

Системи числення: двійкова, шістнадцяткова, перетворення

Спеціалізовані мови програмування

VTFK • 2025

Що вже вивчили

Лекція 1: Огляд системного програмування

  • Три рівні абстракції
  • C, Rust, Assembly — порівняння
  • Архітектура x86-64

План лекції

  • Десяткова система (базова)
  • Двійкова система
  • Шістнадцяткова система
  • Перетворення між системами

Фокус: мислити як комп'ютер

Система числення

Number System (Numeral System)

Символічна система для представлення чисел, де кожна позиція має вагу, залежну від основи (radix).

Аналогія: Як різні мови говорять одне й те саме, системи числення говорять однакові числа по-різному

Позиційна система числення

Порівняння трьох систем

Одне число — три представлення

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% flowchart LR DEC["Десяткова
255"] --> BIN["Двійкова
11111111"] DEC --> HEX["Шістнадцяткова
FF"] BIN -->|8 бітів| BYTE["1 байт"] HEX -->|2 цифри| BYTE style BYTE fill:#FFE5E5 style DEC fill:#E5F3FF style BIN fill:#FFE5FF style HEX fill:#E5FFE5

Таблиця перетворення (0-15)

Десяткова Двійкова Шістнадцяткова
0 0000 0
1 0001 1
2 0010 2
8 1000 8
15 1111 F
16 10000 10
255 11111111 FF
256 100000000 100

Чому двійкова? Чому шістнадцяткова?

Перетворення в Python

Практичні функції

# Десяткова -> Двійкова
print(bin(10))     # 0b1010
print(int('1010', 2))  # 10

# Десяткова -> Шістнадцяткова
print(hex(255))    # 0xff
print(int('FF', 16))   # 255

# Прямі перетворення
print(int('1111', 2))      # 15
print(hex(int('1111', 2))) # 0xf

Ручне перетворення: десяткова -> двійкова

Алгоритм поділу

Перетвори 13 в двійкову:

13 ÷ 2 = 6 залишок 1
 6 ÷ 2 = 3 залишок 0
 3 ÷ 2 = 1 залишок 1
 1 ÷ 2 = 0 залишок 1

Читаємо залишки знизу вгору: 1101
Перевірка: 1×8 + 1×4 + 0×2 + 1×1 = 13 ✓

Ручне перетворення: двійкова -> десяткова

Сума ваг

Перетвори 10110 в десяткову:

Позиція:  4  3  2  1  0
Цифра:    1  0  1  1  0
Вага:    16  8  4  2  1

= 1×16 + 0×8 + 1×4 + 1×2 + 0×1
= 16 + 4 + 2
= 22

Біти та байти: терміни

Міні-вікторина

Чому 255 в шістнадцятковій це FF, а не 100?

  • F = 15, FF = 15×16 + 15 = 255
  • Просто традиція
  • 100 було вже занято
✅ Правильна відповідь: F = 15, FF = 15×16 + 15 = 255
💡 Пояснення:

Шістнадцяткова має цифри 0-9 та А-F (10-15). FF = F×16 + F = 255.

Помилка: мішати префікси

⚠️ ЗАСТЕРЕЖЕННЯ

0x означає шістнадцяткову, 0b означає двійкову

❌ Неправильно

// Неправильно
int x = FF;      // Помилка: FF не визначено
int y = 11111111;  // Це десяткова 11111111, не двійкова

Компілятор має знати систему числення

✓ Правильно

// Правильно
int x = 0xFF;    // 255 в шістнадцятковій
int y = 0b11111111;  // 255 в двійковій
int z = 255;     // 255 в десятковій

Префікси: 0x = hex, 0b = binary, без = decimal

Адреси пам'яті: чому шістнадцяткова?

Підсумки

  • Двійкова (2): як мислить CPU
  • Шістнадцяткова (16): зручна для людини
  • Перетворення: поділ або сума ваг позицій

Далі — архітектура x86-64 та регістри

Домашнє завдання

Наступна лекція:

Лекція 3: Архітектура x86-64

📚 Корисні ресурси:

📚 Корисні ресурси:

Дякую за увагу! 💾

← Повернутися до списку лекцій