Числовые системы и преобразования
Введено| English | Значение |
|---|---|
| byte/baɪt/ | байт |
| denary/ˈdiːnəri/ | десятичная система |
| binary/ˈbaɪnəri/ | двоичная система |
| bit/bɪt/ | бит |
| nibble/ˈnɪbl/ | полубайт |
| hexadecimal/ˌheksəˈdesɪml/ | шестнадцатеричная система |
| register width/ˈredʒɪstə wɪtθ/ | ширина регистра |
| kibi/ˈkɪbi/ | киби |
Терабайт, которым не был терабайтом
- В 2005 калифорнийский покупатель купил жесткий диск, маркированный как 80 ГБ. Его компьютер отобразил 74.5 ГБ. Он подал в суд, и производители в итоге выплатили компенсацию: они считали гигабайт как миллиард байтов, а операционная система — как $2^{30}$.
- Никто не лгал. Существует два семейства префиксов: одно основано на степенях десяти, другое — на степенях двух, и чем больше число, тем дальше они расходятся.
- Вся система представления данных основана на этой идее: компьютер хранит только 0 и 1, а всё остальное — это соглашение о том, как их читать.
- Этот урок посвящен трем системам счисления, конвертациям между ними и двум семействам префиксов.
Три системы счисления
- Десятичная (основание 10) использует цифры от 0 до 9, где разрядные значения являются степенями десяти. Это повседневная система.
- Двоичная (основание 2) использует 0 и 1, где разрядные значения являются степенями двух. Одна цифра — это бит; 4 бита образуют ниббл; 8 бит — это байт.
- Шестнадцатеричная (основание 16) использует цифры от 0 до 9, затем A–F для значений от 10 до 15. Один шестнадцатеричный символ точно соответствует 4 битам, поэтому она используется программистами как сокращенная запись двоичного кода.
| Десятичная | Двоичная | Шестн. |
|---|---|---|
| 10 | 1010 |
A |
| 15 | 1111 |
F |
| 16 | 0001 0000 |
10 |
| 255 | 1111 1111 |
FF |

Каждая система — это разряды; меняется только основание
Числовые системы
байт = сумма позиций значений
Каждый бит равен степени двойки — переключайте биты и следите за изменением десятичного и шестнадцатеричного представлений.
Сколько бит представляет одна шестнадцатеричная цифра?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Одна шестнадцатеричная цифра (0–F) охватывает 16 значений = $2^4$, поэтому она соответствует ровно 4 битам (полубайту).
Сколько бит в одном байте?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Байт равен 8 битам (а полубайт — 4 битам).
Перевод из десятичной в двоичную
- Метод 1, разрядные значения: запишите степени двойки, $128, 64, 32, 16, 8, 4, 2, 1$, и вычитайте наибольшую подходящую, повторяя процесс с остатком. Поставьте 1 под каждым использованным значением.
- Метод 2, последовательное деление: делийте на 2 многократно, записывая каждый остаток, затем прочитайте остатки снизу вверх.
- $42 = 32 + 8 + 2$, поэтому биты под 32, 8 и 2 равны 1, остальные — 0:
0010 1010.

Вычитайте наибольшую подходящую степень двойки и повторяйте
Переведите десятичное $13$ в двоичную систему (8-битное представление не требуется — только значащие биты).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
$13 = 8 + 4 + 1$, поэтому устанавливаются разряды 8, 4 и 1: 1101.
Переведите двоичное 00101010 в десятичную систему.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
$32 + 8 + 2 = 42$ (устанавливаются разряды 32, 8 и 2).
Разобранный пример: перевод 200 из десятичной в двоичную и шестнадцатеричную
- $200 = 128 + 64 + 8$, поэтому 8-битная двоичная запись выглядит как
1100 1000. - Разбиваем на нибблы справа:
1100равно 12, что соответствует C;1000равно 8. Таким образом, шестнадцатеричное число —C8. - Проверка по разрядным значениям в обратном порядке:
C8$= 12 \times 16 + 8 = 200$. ✓ Всегда показывайте ход решения; сами вычисления приносят баллы.
Двоичная и шестнадцатеричная системы в обоих направлениях
- Из двоичной в шестнадцатеричную: сгруппируйте биты в нибблы справа налево, дополняя левую группу нулями, и переведите каждый ниббл.
0010 0010 1110превращается в2 2 E, значит, результат —22E. - Из шестнадцатеричной в двоичную: замените каждый шестнадцатеричный символ его 4-битным паттерном. Арифметика не требуется.
- Из шестнадцатеричной в десятичную: умножьте каждый символ на его разрядное значение, $16^2 = 256$, $16^1 = 16$, $16^0 = 1$.
22E$= 2 \times 256 + 2 \times 16 + 14 = 558$.
Переведите шестнадцатеричное 2E в десятичную систему.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
$2 \times 16 + 14 = 32 + 14 = 46$ (E равно 14).
Переведите двоичное число 0010 0010 1110 в шестнадцатеричную систему.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Каждый полубайт переводится отдельно, справа налево: 0010 = 2, 0010 = 2, 1110 = 14 = E.
Сколько бит нужно для значения?
- В экзаменационных вопросах фиксируется ширина регистра (8, 12 или 16 бит), и необходимо дополнять ведущими нулями до этой ширины. $558$ в 12 битах — это
0010 0010 1110, никогда не10 0010 1110. - Для беззнакового целого числа от 0 до $2^n - 1$ требуется $n$ бит: 200 требует 8 бит (8 бит дают максимум 255), 1000 требует 10 бит (10 бит дают максимум 1023), 16 требует 5 бит (4 бита ограничены значением 15).
- Один шестнадцатеричный символ требует 4 бита, один BCD-символ требует 4 бита, а один ASCII-символ требует 7 бит или 8 для расширенного ASCII.
Запишите десятичное число 558 в виде 12-битного двоичного числа (по четыре бита на группу, пробелы допускаются).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
558 = 512 + 32 + 8 + 4 + 2. Дополните нулями слева до требуемых 12 бит; ответ без дополнения будет считаться неверным.
Разобранный пример: минимальное количество бит
- Система должна хранить значения от 0 до 1000. Какое наименьшее количество бит необходимо?
- Спросите, какая степень двойки впервые превышает 1000. $2^9 = 512$ — недостаточно; $2^{10} = 1024$, значит, 10 бит охватывают диапазон от 0 до 1023, и 1000 помещается.
- Ответ — 10 бит, и причина заключается в диапазоне, а не в количестве цифр. Распространенная ловушка: 16 требует пяти бит, потому что четыре бита ограничены значением 15.
Какое минимальное количество бит необходимо для хранения любого беззнакового значения от 0 до 1000?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Девять бит дают максимум 511, десять бит — 1023. Вопрос касается диапазона, который покрывают биты, а не количества цифр.
Двоичные и десятичные префиксы
- Десятичные префиксы основаны на степенях десяти и используются для емкости дисков и скоростей сети: кило $= 10^3$, мега $= 10^6$, гига $= 10^9$, тера $= 10^{12}$.
- Двоичные префиксы основаны на степенях двух и используются для размеров памяти: киби (Ki) $= 2^{10} = 1024$, меби (Mi) $= 2^{20}$, гиби (Gi) $= 2^{30}$, теби (Ti) $= 2^{40}$.
- Так что диск «1 ТБ» содержит $10^{12}$ байтов, но операционная система, отображающая данные в ТиБ, делит на $2^{40}$ и показывает примерно 0.91. Ничего не потеряно; использовались две разные единицы измерения.
Сколько байт в 1 кибибайте (КиБ)?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Кибибайт равен $2^{10} = 1024$ байтам (двоичный префикс, используемый для памяти).
Накопитель, продаваемый как 1 ТБ, содержит меньше байтов, чем 1 ТиБ оперативной памяти.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
1 ТБ = 10^12 байтов; 1 ТиБ = 2^40, примерно 1,1 x 10^12. Десятичные префиксы используются для накопителей, двоичные — для памяти.
Где реально применяется шестнадцатеричная система
- Адреса памяти и машинный код, так как один шестнадцатеричный символ равен одному нибблу, а байт — ровно двум шестнадцатеричным символам, поэтому дамп читается мгновенно.
- Коды цветов на веб-страницах:
#FF8800— по одному байту красного, зеленого и синего. Аналогично для MAC-адресов и кодов ошибок. - Причина всегда одна: шестнадцатеричная система — это сокращенная запись двоичного кода, которую человек может прочитать и записать без ошибок, а не система, используемая самим компьютером.
Где на практике используется шестнадцатеричная система? Выберите все подходящие варианты.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Шестнадцатеричная система — это удобочитаемая аббревиатура для двоичной: одна цифра на полубайт, две на байт. Сам процессор работает в двоичной системе.
Потерянные баллы
- Дополняйте до ширины, указанной в задании. Незаполненный ответ лишает балла, даже если биты верны.
- Группируйте нибблы справа налево, а не наоборот, иначе все шестнадцатеричные символы сместятся.
- 4 бита достигают 15, 8 бит — 255, 10 бит — 1023. Вопрос «сколько бит» касается диапазона.
- Кибайт равен 1024 байтам, а килобайт — 1000. Указывайте, какую единицу вы использовали в любом расчете размера.
Вы поняли
- десятичная (основание 10), двоичная (основание 2, бит, ниббл = 4 бита, байт = 8 бит), шестнадцатеричная (основание 16, где один символ точно равен одному нибблу)
- перевод из десятичной системы в двоичную путем вычитания степеней двойки или последовательного деления с чтением остатков снизу вверх; из двоичной в шестнадцатеричную путем группировки нибблов справа налево; из шестнадцатеричной в десятичную по разрядам
- дополнить нулями до ширины регистра; беззнаковое значение требует $n$ бит, где $2^n$ впервые превышает его
- десятичные префиксы — это степени ten (для дисков, сетей), двоичные префиксы — степени two (для памяти): кибисти $= 1024$