Как конвертировать двоичный код в десятичное число
Учимся переводить двоичные числа в десятичные: объясняем принцип, даём формулу и примеры для программистов.
Двоичная система — основа цифровой электроники и программирования. Компьютеры работают с нулями и единицами, а разработчикам часто приходится переводить эти значения в привычные десятичные числа. Разберёмся, как это делать вручную и программно.
Что такое двоичная система счисления
Двоичная система использует только две цифры: 0 и 1. Каждая позиция числа представляет степень двойки, начиная справа с нуля. Например, двоичное число 1011 раскладывается так:
- Крайняя правая позиция (0-я) — это 2⁰ = 1
- Следующая (1-я) — это 2¹ = 2
- Вторая (2-я) — это 2² = 4
- Третья (3-я) — это 2³ = 8
Чтобы получить десятичное число, умножаем каждую двоичную цифру на соответствующую степень двойки и суммируем результаты.
Формула конвертации
Общая формула перевода двоичного числа в десятичное выглядит так:
Десятичное = d(n-1) × 2^(n-1) + ... + d2 × 2² + d1 × 2¹ + d0 × 2⁰
Где d — это цифра (0 или 1) в соответствующей позиции, n — количество разрядов.
Пример расчёта
Возьмём двоичное число 1101:
1101₂ = 1×2³ + 1×2² + 0×2¹ + 1×2⁰
= 1×8 + 1×4 + 0×2 + 1×1
= 8 + 4 + 0 + 1
= 13₁₀
Для 10110:
10110₂ = 1×2⁴ + 0×2³ + 1×2² + 1×2¹ + 0×2⁰
= 16 + 0 + 4 + 2 + 0
= 22₁₀
Реализация на разных языках
JavaScript
В JavaScript есть встроенный метод parseInt() с указанием основания системы счисления:
const binary = '1101';
const decimal = parseInt(binary, 2);
console.log(decimal); // 13
// Или через Number с префиксом 0b
const num = 0b1101;
console.log(num); // 13
Собственная реализация алгоритма:
function binaryToDecimal(binary) {
let decimal = 0;
const length = binary.length;
for (let i = 0; i < length; i++) {
const bit = binary[length - 1 - i];
decimal += parseInt(bit) * Math.pow(2, i);
}
return decimal;
}
console.log(binaryToDecimal('1011')); // 11
console.log(binaryToDecimal('11111111')); // 255
Python
Python тоже предоставляет встроенную функцию:
binary = '1101'
decimal = int(binary, 2)
print(decimal) # 13
# С префиксом 0b
num = 0b1101
print(num) # 13
Ручная реализация:
def binary_to_decimal(binary):
decimal = 0
for i, bit in enumerate(reversed(binary)):
decimal += int(bit) * (2 ** i)
return decimal
print(binary_to_decimal('1011')) # 11
print(binary_to_decimal('11111111')) # 255
PHP
$binary = '1101';
$decimal = bindec($binary);
echo $decimal; // 13
// Или через base_convert
$decimal = base_convert($binary, 2, 10);
echo $decimal; // 13
Практические задачи
Работа с битовыми масками
При работе с правами доступа часто используют двоичное представление. Например, права rwx (чтение, запись, выполнение) записывают как 111₂ = 7₁₀:
const permissions = 0b111; // rwx
const readOnly = 0b100; // r--
const execute = 0b001; // --x
console.log(permissions); // 7
console.log(readOnly); // 4
console.log(execute); // 1
Обработка флагов
В API или базах данных флаги часто хранят в одном числе. Чтобы понять, какие опции включены, переводим десятичное значение обратно в двоичное и анализируем биты:
function parseFlags(decimal) {
const binary = decimal.toString(2);
const flags = {
notifications: Boolean(decimal & 0b0001),
darkMode: Boolean(decimal & 0b0010),
autoSave: Boolean(decimal & 0b0100),
analytics: Boolean(decimal & 0b1000)
};
return flags;
}
console.log(parseFlags(13));
// { notifications: true, darkMode: false, autoSave: true, analytics: true }
// 13₁₀ = 1101₂
Частые ошибки
Забытые ведущие нули
Двоичное число 0101 и 101 — это разные вещи при работе с фиксированной разрядностью (например, байты). В десятичной системе оба дают 5, но в контексте битовых операций важна длина:
console.log(parseInt('0101', 2)); // 5
console.log(parseInt('101', 2)); // 5
// Но при работе с байтами
const byte1 = 0b00000101; // 5 в байте
const byte2 = 0b101; // тоже 5, но без ведущих нулей
Переполнение разрядности
В JavaScript числа представлены 64-битными значениями с плавающей точкой. Для целых чисел безопасный диапазон — до 2⁵³-1. При работе с длинными двоичными числами можно получить неточность:
const longBinary = '1'.repeat(60);
console.log(parseInt(longBinary, 2)); // может потерять точность
Инструменты для быстрой конвертации
Для разработчиков, которые часто работают с системами счисления, есть готовые онлайн-инструменты. Конвертер систем счисления позволяет быстро переводить числа между двоичной, восьмеричной, десятичной и шестнадцатеричной системами. Также полезен калькулятор подсетей для работы с IP-адресами в двоичном виде, генератор UUID для создания уникальных идентификаторов и MD5 хеш-генератор для проверки контрольных сумм.
Понимание принципов конвертации помогает не только в учебных задачах, но и в реальной разработке — при отладке, работе с низкоуровневыми API и оптимизации алгоритмов.