# Програмізми. Степені двійки Note: При вивченні програмування в різних місцях будуть з'являтись особливі числа -- степені двійки. Що це за числа? --- ### Ряд чисел Це ряд чисел, який будується за простим правилом: - починаємо з одиниці - кожне наступне число отримуємо помноживши попереднє число на 2 - перші числа цього ряду: 1, 2, 4, 8, 16, 32, ... Note: У програмістів є особлива любов до чисел цього рядку. Деякі з них програмісти навіть знають напам'ять. Спробую пояснити причини цієї "любові". Але для початку, байка. --- ## Легенда Автор шахів розповідає про винагороду ![](https://i.imgur.com/l0s1t5T.png =250x) Note: - султану сподобались шахи - він запропонував автору шахів винагороду - автор шахів запропонував видати нагороду зерном по такій схемі: - в перший день видати одну зернинку, як для першої клітинки шахової дошки - на другий день видати в 2 рази більше, як для другої клітинки - на третій день видати в 2 рази більше, тобто уже 4 зернятка - і так далі аж до кінця дошки - це і буде нагорода - султан погодився --- ## Легенда В султанаті починають підозрювати неладне ![](https://i.imgur.com/DugqciU.png) Note: - через два тижні прийшов казначей і сказав, що є проблемка - він порахував скільки треба виплатити зерна, і них стільки зерна немає. Скоро елеватори будуть порожніми --- ## Легенда. Результат Султан розлютився на автора шахів і стратив його ![](https://i.imgur.com/6ym0bqW.png =200x) --- ### Реальні використання - $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)?