Что такое позиционная система счисления
В десятичном числе 4 095 цифра 4 означает не 4, а 4 000, потому что стоит в разряде тысяч. Каждая позиция умножает цифру на степень числа 10 (1, 10, 100, 1 000…). Это и есть позиционная система, а основание — это количество используемых различных цифр: в десятичной их десять.
Двоичная система устроена так же, но с основанием 2: существуют только 0 и 1, а каждый разряд вдвое больше предыдущего. В шестнадцатеричной системе основание 16: шестнадцать цифр — это 0–9 и буквы A–F, а каждый разряд в 16 раз больше предыдущего. Компьютеры работают в двоичной системе, потому что схеме достаточно различать два состояния (выключено и включено), а шестнадцатеричная запись — это короткий способ записывать эти биты.
| Позиция (справа налево) | Значение в двоичной | Значение в шестнадцатеричной |
|---|---|---|
| 1-я | 1 | 1 |
| 2-я | 2 | 16 |
| 3-я | 4 | 256 |
| 4-я | 8 | 4 096 |
| 5-я | 16 | 65 536 |
| 6-я | 32 | 1 048 576 |
| 7-я | 64 | 16 777 216 |
| 8-я | 128 | 268 435 456 |
Из двоичной в десятичную вручную
Под каждой цифрой записывают вес её разряда и складывают только те разряды, где стоит 1. Пример с числом 1101: справа налево разряды весят 1, 2, 4 и 8.
- Запишите число, а под ним вес каждой позиции: 1 1 0 1 над 8 4 2 1.
- Посмотрите, что стоит в каждом разряде: 1 в разряде восьмёрки, 1 в разряде четвёрки, 0 в разряде двойки и 1 в разряде единицы.
- Пропустите разряды с 0 (здесь это разряд двойки).
- Сложите: 8 + 4 + 0 + 1 = 13. Значит, 1101 в двоичной системе — это 13 в десятичной.
С большим количеством цифр всё так же: 11111111 — это 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255, наибольшее значение, которое помещается в 8 бит. А 10110110 — это 128 + 32 + 16 + 4 + 2 = 182.
Из десятичной в двоичную: последовательное деление
Число делят на 2 снова и снова, записывая остаток от каждого деления (всегда 0 или 1), пока частное не станет равным 0. Остатки, прочитанные снизу вверх, и образуют двоичное число. Пример с числом 45:
- 45 ÷ 2 = 22, остаток 1
- 22 ÷ 2 = 11, остаток 0
- 11 ÷ 2 = 5, остаток 1
- 5 ÷ 2 = 2, остаток 1
- 2 ÷ 2 = 1, остаток 0
- 1 ÷ 2 = 0, остаток 1
Если читать остатки снизу вверх, получится 101101. Для проверки сложите: 32 + 8 + 4 + 1 = 45.
Есть и другой способ, который многим нравится больше: вычитать степени двойки от большей к меньшей. Для 200: помещается 128 (остаётся 72), помещается 64 (остаётся 8), не помещаются 32 и 16, но помещается 8 (остаётся 0). Использованные разряды — 128, 64 и 8, значит, 200 = 11001000.
Шестнадцатеричная система: шестнадцать цифр и таблица под рукой
Поскольку цифр для чисел от 10 до 15 нет, используют буквы A, B, C, D, E и F. Одна шестнадцатеричная цифра соответствует ровно четырём битам (это «полубайт», nibble), и именно поэтому система так удобна: байт, то есть 8 бит, записывается всего двумя шестнадцатеричными цифрами.
Чтобы перевести число из шестнадцатеричной системы в десятичную, умножьте каждую цифру на степень числа 16 её разряда и сложите. Например, 3F = 3 × 16 + 15 = 63, а A3 = 10 × 16 + 3 = 163.
| Десятичная | Двоичная (4 бита) | Восьмеричная | Шестнадцатеричная |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
Зачем нужна шестнадцатеричная запись: байты, цвета и адреса
Байт — это 8 бит, он принимает значения от 0 до 255 (от 00000000 до 11111111). Записывать биты вручную долго и легко ошибиться; в шестнадцатеричной системе тот же байт — это два символа, от 00 до FF. Чтобы перевести двоичное число в шестнадцатеричное, разбейте биты на группы по четыре справа и замените каждую группу цифрой из таблицы. Пример: 11010111 разбивается на 1101 и 0111, это D и 7, значит, число равно D7. В десятичной системе это 13 × 16 + 7 = 215.
Самый известный пример — цвета в вебе. В #FF8800 три байта: FF для красного (255), 88 для зелёного (136) и 00 для синего (0). Это насыщенный оранжевый: весь красный, чуть больше половины зелёного и ни капли синего. Шестнадцатеричная запись встречается и в адресах памяти, кодах ошибок и сетевых идентификаторах.
От текста к двоичному коду через ASCII
Компьютер хранит каждую букву как число, а это число — как биты. В таблице ASCII буква A — это 65, а в двоичном виде из 8 бит — 01000001. Слово «Hi» состоит из двух букв: H — это 72 (01001000), а i — 105 (01101001), поэтому записывается оно как 01001000 01101001. Слово «Hola» — это 72, 111, 108 и 97, то есть 01001000 01101111 01101100 01100001, или в шестнадцатеричной записи 48 6F 6C 61.
Инструмент использует кодировку UTF-8: для основных латинских букв каждый символ занимает один байт из 8 бит, а русская буква, буква с диакритикой или эмодзи занимают несколько байт, поэтому дают больше 8 бит. Например, буква «я» занимает два байта: 11010001 10001111 (D1 8F в шестнадцатеричной записи).
Как сделать всё это с помощью инструмента
Конвертер «Двоичная, десятичная и шестнадцатеричная» поможет проверить ваши расчёты вручную или без ошибок перевести длинные числа.
- Введите число в поле его системы: «Десятичная (основание 10)», «Двоичная (основание 2)», восьмеричная или «Шестнадцатеричная (основание 16)». Остальные три заполнятся сами.
- Если цифра не подходит для системы (например, 2 в двоичной), инструмент предупредит вас.
- Для текста введите его в поле «Текст» и посмотрите «Двоичный код (8 бит на символ)» и шестнадцатеричный код по байтам. Можно также вставить биты группами по 8, чтобы вернуться к тексту.
- Для необычных систем используйте «Любая система счисления (от 2 до 36)»: выберите исходную систему, целевую и введите число.
Ограничения: инструмент переводит только целые неотрицательные числа (без дробной части и знака) и не добавляет нули слева за вас, так что если нужны ровно 8 бит, дополните вручную (13 — это 00001101). Всё, что вы вводите, остаётся в вашем браузере.
Частые ошибки
- Читать остатки в обратном порядке: при последовательном делении первый остаток — это самая правая цифра, а не самая левая.
- Забывать нули слева, когда они нужны: 13 — это 1101, но как байт — 00001101. Это важно, когда длина — часть данных, как в цвете или сетевой маске.
- Путать букву O с нулём, а шестнадцатеричную B (11) с цифрой 8 при копировании. В шестнадцатеричной записи заглавные и строчные буквы значат одно и то же, но это не то же самое, что цифра.
- Оставлять префикс 0x или знак # при переводе: это лишь пометки, что число шестнадцатеричное, и их нужно убрать перед вставкой.
- Думать, что 10 в двоичной системе — это десять: это два. Одно и то же «10» означает 2, 10 или 16 в зависимости от системы.
Решённые задачи для тренировки
Попробуйте решить каждую, прежде чем смотреть ответ, а затем проверьте с помощью инструмента.
- Переведите 10110110 в десятичную и шестнадцатеричную. Ответ: 128 + 32 + 16 + 4 + 2 = 182; группами по четыре, 1011 0110 = B6.
- Переведите 200 в двоичную и шестнадцатеричную. Ответ: 11001000 и C8 (12 × 16 + 8 = 200).
- Переведите 7F в двоичную. Ответ: 7 = 0111, а F = 1111, то есть 01111111, что в десятичной системе равно 127.
- Запишите «OK» в двоичном виде. Ответ: O — это 79, а K — 75, то есть 01001111 01001011.
Частые вопросы
Как перевести 1101 из двоичной в десятичную?
Сложите веса разрядов, где стоит 1: 8 + 4 + 1 = 13. Вторая цифра справа — 0, поэтому 2 не прибавляется.
Сколько будет 255 в двоичной и шестнадцатеричной системах?
255 — это 11111111 в двоичной и FF в шестнадцатеричной системе. Это наибольшее значение, которое помещается в байт из 8 бит.
Почему в шестнадцатеричной системе используются буквы?
Потому что нужно шестнадцать разных символов, а десятичная система даёт только десять (0–9). Поэтому A означает 10, B — 11, C — 12, D — 13, E — 14 и F — 15.
Сколько разных чисел можно записать 8 битами?
256, от 0 до 255. В общем случае n битами можно представить 2 в степени n значений.
Переводит ли инструмент отрицательные числа или числа с дробной частью?
Нет, только целые неотрицательные числа. Для текста он использует UTF-8, поэтому кириллица, буквы с диакритикой и эмодзи дают больше 8 бит.