Степени двойки, двоичные приставки и системы счисления
Таблица степеней двойки от 2⁰ до 2⁶⁴ в десятичной и шестнадцатеричной записи и отрицательных степеней 2⁻ⁿ. Двоичные и десятичные приставки (КиБ и КБ, МиБ и МБ), почему диск на 1 ТБ показывается как 931 ГБ, диапазоны целочисленных типов int8–int64, таблица шестнадцатеричных цифр и приёмы перевода между системами счисления.
Степени двойки — основа вычислительной техники: n бит позволяют записать 2ⁿ различных значений, объёмы памяти кратны степеням двойки, а стойкость шифров и паролей измеряется в битах — двоичном логарифме числа вариантов перебора.
Степени двойки от 0 до 64
| n | 2n | В шестнадцатеричной | 2−n |
|---|---|---|---|
| 0 | 1 | 1 | 1 |
| 1 | 2 | 2 | 0,5 |
| 2 | 4 | 4 | 0,25 |
| 3 | 8 | 8 | 0,125 |
| 4 | 16 | 10 | 0,0625 |
| 5 | 32 | 20 | 0,03125 |
| 6 | 64 | 40 | 0,015625 |
| 7 | 128 | 80 | 0,0078125 |
| 8 | 256 | 100 | 0,00390625 |
| 9 | 512 | 200 | 0,001953125 |
| 10 | 1 024 | 400 | 0,0009765625 |
| 11 | 2 048 | 800 | 0,00048828125 |
| 12 | 4 096 | 1000 | 0,000244140625 |
| 13 | 8 192 | 2000 | ≈ 1,2207·10−4 |
| 14 | 16 384 | 4000 | ≈ 6,1035·10−5 |
| 15 | 32 768 | 8000 | ≈ 3,0518·10−5 |
| 16 | 65 536 | 10000 | ≈ 1,5259·10−5 |
| 17 | 131 072 | 20000 | ≈ 7,6294·10−6 |
| 18 | 262 144 | 40000 | ≈ 3,8147·10−6 |
| 19 | 524 288 | 80000 | ≈ 1,9073·10−6 |
| 20 | 1 048 576 | 100000 | ≈ 9,5367·10−7 |
| 21 | 2 097 152 | 200000 | ≈ 4,7684·10−7 |
| 22 | 4 194 304 | 400000 | ≈ 2,3842·10−7 |
| 23 | 8 388 608 | 800000 | ≈ 1,1921·10−7 |
| 24 | 16 777 216 | 1000000 | ≈ 5,9605·10−8 |
| 25 | 33 554 432 | 2000000 | ≈ 2,9802·10−8 |
| 26 | 67 108 864 | 4000000 | ≈ 1,4901·10−8 |
| 27 | 134 217 728 | 8000000 | ≈ 7,4506·10−9 |
| 28 | 268 435 456 | 10000000 | ≈ 3,7253·10−9 |
| 29 | 536 870 912 | 20000000 | ≈ 1,8626·10−9 |
| 30 | 1 073 741 824 | 40000000 | ≈ 9,3132·10−10 |
| 31 | 2 147 483 648 | 80000000 | ≈ 4,6566·10−10 |
| 32 | 4 294 967 296 | 100000000 | ≈ 2,3283·10−10 |
| 33 | 8 589 934 592 | 200000000 | ≈ 1,1642·10−10 |
| 34 | 17 179 869 184 | 400000000 | ≈ 5,8208·10−11 |
| 35 | 34 359 738 368 | 800000000 | ≈ 2,9104·10−11 |
| 36 | 68 719 476 736 | 1000000000 | ≈ 1,4552·10−11 |
| 37 | 137 438 953 472 | 2000000000 | ≈ 7,2760·10−12 |
| 38 | 274 877 906 944 | 4000000000 | ≈ 3,6380·10−12 |
| 39 | 549 755 813 888 | 8000000000 | ≈ 1,8190·10−12 |
| 40 | 1 099 511 627 776 | 10000000000 | ≈ 9,0949·10−13 |
| 41 | 2 199 023 255 552 | 20000000000 | ≈ 4,5475·10−13 |
| 42 | 4 398 046 511 104 | 40000000000 | ≈ 2,2737·10−13 |
| 43 | 8 796 093 022 208 | 80000000000 | ≈ 1,1369·10−13 |
| 44 | 17 592 186 044 416 | 100000000000 | ≈ 5,6843·10−14 |
| 45 | 35 184 372 088 832 | 200000000000 | ≈ 2,8422·10−14 |
| 46 | 70 368 744 177 664 | 400000000000 | ≈ 1,4211·10−14 |
| 47 | 140 737 488 355 328 | 800000000000 | ≈ 7,1054·10−15 |
| 48 | 281 474 976 710 656 | 1000000000000 | ≈ 3,5527·10−15 |
| 49 | 562 949 953 421 312 | 2000000000000 | ≈ 1,7764·10−15 |
| 50 | 1 125 899 906 842 624 | 4000000000000 | ≈ 8,8818·10−16 |
| 51 | 2 251 799 813 685 248 | 8000000000000 | ≈ 4,4409·10−16 |
| 52 | 4 503 599 627 370 496 | 10000000000000 | ≈ 2,2204·10−16 |
| 53 | 9 007 199 254 740 992 | 20000000000000 | ≈ 1,1102·10−16 |
| 54 | 18 014 398 509 481 984 | 40000000000000 | ≈ 5,5511·10−17 |
| 55 | 36 028 797 018 963 968 | 80000000000000 | ≈ 2,7756·10−17 |
| 56 | 72 057 594 037 927 936 | 100000000000000 | ≈ 1,3878·10−17 |
| 57 | 144 115 188 075 855 872 | 200000000000000 | ≈ 6,9389·10−18 |
| 58 | 288 230 376 151 711 744 | 400000000000000 | ≈ 3,4694·10−18 |
| 59 | 576 460 752 303 423 488 | 800000000000000 | ≈ 1,7347·10−18 |
| 60 | 1 152 921 504 606 846 976 | 1000000000000000 | ≈ 8,6736·10−19 |
| 61 | 2 305 843 009 213 693 952 | 2000000000000000 | ≈ 4,3368·10−19 |
| 62 | 4 611 686 018 427 387 904 | 4000000000000000 | ≈ 2,1684·10−19 |
| 63 | 9 223 372 036 854 775 808 | 8000000000000000 | ≈ 1,0842·10−19 |
| 64 | 18 446 744 073 709 551 616 | 10000000000000000 | ≈ 5,4210·10−20 |
Удобное приближение: 2¹⁰ = 1024 ≈ 10³, поэтому 2²⁰ ≈ миллион, 2³⁰ ≈ миллиард, 2⁴⁰ ≈ триллион. Например, 2³² ≈ 4·10⁹, а 2⁶⁴ ≈ 1,8·10¹⁹.
Двоичные и десятичные приставки
| Десятичная приставка | Значение | Двоичная приставка (МЭК) | Значение | Разница |
|---|---|---|---|---|
| килобайт, кБ | 10³ | кибибайт, КиБ (KiB) | 2¹⁰ = 1024 | 2,4 % |
| мегабайт, МБ | 10⁶ | мебибайт, МиБ (MiB) | 2²⁰ = 1 048 576 | 4,9 % |
| гигабайт, ГБ | 10⁹ | гибибайт, ГиБ (GiB) | 2³⁰ = 1 073 741 824 | 7,4 % |
| терабайт, ТБ | 10¹² | тебибайт, ТиБ (TiB) | 2⁴⁰ | 10,0 % |
| петабайт, ПБ | 10¹⁵ | пебибайт, ПиБ (PiB) | 2⁵⁰ | 12,6 % |
| эксабайт, ЭБ | 10¹⁸ | эксбибайт, ЭиБ (EiB) | 2⁶⁰ | 15,3 % |
Производители накопителей указывают объём в десятичных единицах, а Windows считает в двоичных, но пишет «ГБ». Поэтому диск на 1 ТБ = 10¹² байт показывается как 10¹²/2³⁰ ≈ 931 «ГБ» — место никуда не пропало. Скорость передачи данных всегда измеряют в десятичных единицах и в битах: 100 Мбит/с = 12,5 МБ/с.
Диапазоны целочисленных типов
| Тип | Бит | Без знака | Со знаком (дополнительный код) |
|---|---|---|---|
| byte / int8 | 8 | 0 … 255 | −128 … 127 |
| short / int16 | 16 | 0 … 65 535 | −32 768 … 32 767 |
| int / int32 | 32 | 0 … 4 294 967 295 | −2 147 483 648 … 2 147 483 647 |
| long / int64 | 64 | 0 … 18 446 744 073 709 551 615 | −9 223 372 036 854 775 808 … 9 223 372 036 854 775 807 |
Числа с плавающей точкой двойной точности (double) хранят 53 значащих бита, поэтому все целые числа до 2⁵³ = 9 007 199 254 740 992 представимы точно, а дальше появляются пропуски. В JavaScript это значение Number.MAX_SAFE_INTEGER + 1.
Шестнадцатеричные цифры
| Hex | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Dec | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| Bin | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
Каждая шестнадцатеричная цифра соответствует ровно четырём битам, поэтому перевод между двоичной и шестнадцатеричной системами делается по группам: 1011 0110₂ = B6₁₆ = 182₁₀. Восьмеричная цифра соответствует трём битам: 10 110 110₂ = 266₈.
Приёмы перевода
- Из десятичной в двоичную: делим число на 2 и записываем остатки снизу вверх. 37 → 18 (1) → 9 (0) → 4 (1) → 2 (0) → 1 (0) → 0 (1): 37 = 100101₂.
- Из двоичной в десятичную: складываем степени двойки, стоящие на местах единиц: 100101₂ = 32 + 4 + 1 = 37.
- Число бит для N значений: ⌈log₂ N⌉. Например, для 1000 вариантов нужно 10 бит, для миллиона — 20.
- Проверка, что число — степень двойки: у него ровно одна единица в двоичной записи; в программах это проверяют выражением
n & (n − 1) == 0.
Стойкость пароля в битах — это log₂ числа вариантов: пароль из 12 случайных символов из 62 (буквы и цифры) даёт 12·log₂ 62 ≈ 71,5 бита. Подробнее — в калькуляторах генератора паролей и проверки стойкости пароля.
Комментарии и вопросы