# Програмізми. Степені двійки
Note:
При вивченні програмування в різних місцях будуть з'являтись особливі числа -- степені двійки. Що це за числа?
---
### Ряд чисел
Це ряд чисел, який будується за простим правилом:
- починаємо з одиниці
- кожне наступне число отримуємо помноживши попереднє число на 2
- перші числа цього ряду:
1, 2, 4, 8, 16, 32, ...
Note:
У програмістів є особлива любов до чисел цього рядку. Деякі з них програмісти навіть знають напам'ять.
Спробую пояснити причини цієї "любові". Але для початку, байка.
---
## Легенда
Автор шахів розповідає про винагороду

Note:
- султану сподобались шахи
- він запропонував автору шахів винагороду
- автор шахів запропонував видати нагороду зерном по такій схемі:
- в перший день видати одну зернинку, як для першої клітинки шахової дошки
- на другий день видати в 2 рази більше, як для другої клітинки
- на третій день видати в 2 рази більше, тобто уже 4 зернятка
- і так далі аж до кінця дошки
- це і буде нагорода
- султан погодився
---
## Легенда
В султанаті починають підозрювати неладне

Note:
- через два тижні прийшов казначей і сказав, що є проблемка
- він порахував скільки треба виплатити зерна, і них стільки зерна немає. Скоро елеватори будуть порожніми
---
## Легенда. Результат
Султан розлютився на автора шахів і стратив його

---
### Реальні використання
- $2^4 = 16$ --- основа шістнядцяткової системи (**HEX**)
- $2^7 = 128$ --- кількість символів в таблиці **ASCII**
- $2^8 = 256$ --- кількість різних чисел, котрі вміщуються в один байт (діапазон 1-байтного числа)
- $2^9 = 512$ --- мінімальний розмір сектора жорсткого диску або флешки
---
### Реальні використання
- $2^{10} = 1024$ --- 1 кібібайт (**KiB**)
- $2^{11} = 2048$ --- є така гра 🎮
- $2^{12} = 4096$ --- розмір сторінки віртуальної пам'яті більшості комп'ютерів
- $2^{13} = 8192$ --- розмір блоку даних в базі даних PostgreSQL
- $2^{16} = 65536$ --- діапазон 2-байтного числа
- $2^{20} = 1048576$ --- 1 мебібайт (**MiB**)
---
### Реальні використання
- $2^{24} \approx 16$ мільйонів --- кількість різних кольорів, які може відобразити TrueColor екран
- $2^{30} \approx 1.07$ мільярда --- 1 гібібайт (**GiB**)
- $2^{32} \approx 4.2$ мільярда --- діапазон значень 4-байтного цілого числа
- $2^{40} \approx 1.1$ трильйона --- 1 тебібайт (**TiB**)
---
### Реальні використання
- $2^{41} \approx 2.2$ трильйона --- більше ніж кількість галактик у Всесвіті
- $2^{64} \approx 18$ квінтільйонів --- кількість зерна, яку попросив мудрець як винагороду, а також діапазон регістрів сучасних процесорів (8-байтових)
---
### Реальні використання
- $2^{80}$ --- більше ніж кількість зірок у Всесвіті
- $2^{128}$ -- діапазон **UUID** ідентифікаторів, кількість **IPv6** адрес, кількість різних **MD5** хешів, типовий діапазон адресації пам'яті для графічних карт
---
### Реальні використання
- $2^{256}$ -- кількість різних криптографічних хешів **SHA-256**, якими підписують бібліотеки Python на сайті PyPi
- $2^{273}$ -- більше ніж кількість атомів у Всесвіті
- $2^{512}$ -- кількість різних хешів **SHA-512**
---
### Питання для самоперевірки
- чи правильно зробив султан, стративши мудреця?
- чи можна кожній зірці у Всесіті присвоїти унікальний UUID ідентифікатор?
- в чому різниця між Гі**бі**байтом (GiB) та Гі**га**байтом (GB)?