Из двоичной в десятичную: возвращаем битам смысл
Что делает эта конвертация
Инструмент читает строку из нулей и единиц как число в основании 2 и пересказывает его в основании 10. Это направление нужно, когда значение на экране уже в машинном формате — дамп регистра, маска, байт флагов, — а вопрос вы задаёте человеческий: например, перешло ли значение через порог.
Метод взвешенной суммы
Каждый двоичный разряд означает степень 2 по своей позиции справа: 1, 2, 4, 8 и дальше. Сложите веса тех позиций, где стоит единица. Для 10011100 это 128, 16, 8 и 4, то есть 156. Как только первые веса запомнены — 1, 2, 4, 8, 16, 32, 64, 128, — вся работа сводится к короткому сложению.
Таблица перевода из двоичной системы в десятичную
Частые битовые шаблоны и их десятичные значения. Запоминать стоит строки из одних единиц: каждая из них на 1 меньше следующей степени 2, поэтому 255 и 65535 встречаются в вычислениях повсюду.
| Двоичная | Десятичная |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 10 | 2 |
| 11 | 3 |
| 1010 | 10 |
| 1111 | 15 |
| 10000 | 16 |
| 101010 | 42 |
| 11111111 | 255 |
| 100000000 | 256 |
Чтение байта флагов
Байт состояния — это не столько число, сколько восемь ответов «да или нет», упакованных в одно значение. Перевод в десятичную даёт компактный идентификатор, который удобно сравнивать и писать в журнал, а отдельные биты объясняют, что именно произошло. Полезны оба чтения, и конвертация — мост между таблицей из документации, где расписаны биты, и логом, куда попадает десятичное число.
Следите за ведущими нулями
Ведущие нули не меняют значение — 0011 и 11 равны трём, — но меняют ширину поля, а ширина как раз и говорит, один это байт или четыре. Когда значение скопировано из поля фиксированной длины, сохраняйте дополнение в записях, хотя конвертер его и отбрасывает.
Частые вопросы
Как читать двоичное число в уме?
Напишите над разрядами веса 128, 64, 32, 16, 8, 4, 2, 1 слева направо для восьмибитного числа, затем сложите веса над каждой единицей. Для 10011100 получится 128 + 16 + 8 + 4 = 156. Тренировки на восьми битах покрывают почти все бытовые случаи.
Почему 11111111 равно 255, а не 256?
Потому что восемь битов представляют 256 разных значений, считая от нуля, значит наибольшее из них — 255. В общем случае n битов дают 2 в степени n минус 1. Эта разница в единицу и объясняет, почему байт вмещает 256 значений, но само число 256 в один байт не помещается.
Можно вставить двоичный код с пробелами между байтами?
Да. Пробелы, табуляции и подчёркивания игнорируются, поэтому строка из терминала или из дампа памяти конвертируется без предварительной чистки. Группировка битов по четыре или по восемь — только подсказка для глаза, сама по себе она ничего не значит.
Ведущая единица означает отрицательное число?
Только если вы заранее договорились, что поле знаковое и записано в дополнительном коде, а это свойство формата, а не самих битов. Само по себе 11111111 — просто 255. Конвертер считает любой ввод неотрицательной величиной, пока вы явно не поставите минус.
Какая самая длинная двоичная строка принимается?
Достаточно длинная для любого значения, которое вы решите вставить: расчёты идут в точной целочисленной арифметике, а не в плавающей точке, поэтому с ростом длины точность не падает, как у калькулятора. Слишком длинный ввод отклоняется с понятным сообщением, а не обрезается молча.