Системы счисления путают почти всех, кто с ними сталкивается впервые - будь то студент на информатике или разработчик, который вдруг видит в логе странное число вроде 1F4 и не понимает, что перед ним 500 в десятичной записи. Калькулятор ниже переводит число сразу между четырьмя системами - двоичной, восьмеричной, десятичной и шестнадцатеричной. Введите число, укажите, в какой системе оно записано, и результат появится во всех остальных без дополнительных кнопок.
Что такое система счисления
Система счисления - это способ записи чисел с помощью ограниченного набора цифр. Разница между системами в основании: сколько уникальных цифр используется и какой вес имеет каждая позиция.
- Двоичная (основание 2) - только цифры 0 и 1.
- Восьмеричная (основание 8) - цифры от 0 до 7.
- Десятичная (основание 10) - привычные цифры от 0 до 9, та самая система, в которой мы считаем деньги и возраст.
- Шестнадцатеричная (основание 16) - цифры от 0 до 9 и буквы A-F, где A равна 10, а F равна 15.
Одно и то же количество - скажем, число яблок на столе - можно записать в любой из этих систем, просто цифры на бумаге будут выглядеть по-разному.
Перевод из десятичной в двоичную: пример на 255
Разбираем на числе 255. Чтобы получить его двоичную запись, делим на 2 столбиком и каждый раз запоминаем остаток:
255 / 2 = 127, остаток 1
127 / 2 = 63, остаток 1
63 / 2 = 31, остаток 1
31 / 2 = 15, остаток 1
15 / 2 = 7, остаток 1
7 / 2 = 3, остаток 1
3 / 2 = 1, остаток 1
1 / 2 = 0, остаток 1
Деление закончилось, когда частное стало нулём. Теперь читаем остатки снизу вверх - получаем 11111111. Это и есть 255 в двоичной системе, ровно восемь единиц подряд, что не случайность: 255 - это максимальное число, которое помещается в один байт (2 в восьмой степени минус 1).
Перевод в восьмеричную и шестнадцатеричную систему
Тот же принцип деления с остатком работает для любого основания, просто делить нужно не на 2, а на нужное число.
Для восьмеричной системы делим 255 на 8: 255 / 8 = 31, остаток 7; 31 / 8 = 3, остаток 7; 3 / 8 = 0, остаток 3. Остатки снизу вверх дают 377.
Для шестнадцатеричной системы делим 255 на 16: 255 / 16 = 15, остаток 15; 15 / 16 = 0, остаток 15. Остаток 15 записывается как буква F, поэтому 255 в hex - это FF.
Проверить результат просто: 255 = 3×64 + 7×8 + 7×1 (восьмеричная развёртка) и 255 = 15×16 + 15×1 (шестнадцатеричная развёртка). Оба варианта дают 255, значит перевод верный.
Перевод из двоичной системы в десятичную
Обратное действие - взять число в другой системе и получить из него привычную десятичную запись - работает через позиционные веса. У каждого разряда в двоичном числе есть вес: 1, 2, 4, 8, 16, 32 и так далее, начиная с крайнего правого разряда.
Возьмём двоичное число 1010. Читаем справа налево: последняя цифра 0 имеет вес 1, следующая 1 - вес 2, следующая 0 - вес 4, первая 1 - вес 8. Складываем произведения цифры на вес:
1×8 + 0×4 + 1×2 + 0×1 = 8 + 0 + 2 + 0 = 10
Итог - десятичное число 10. Тот же метод годится для восьмеричной и шестнадцатеричной систем, только веса разрядов будут степенями 8 или 16 соответственно.
Зачем вообще нужны разные системы счисления
Двоичная - язык самого железа
Процессор устроен на транзисторах, а транзистор надёжно различает лишь два состояния: ток есть или тока нет. Вся память, все вычисления и вся логика компьютера сводятся к операциям с нулями и единицами - не потому что так удобнее программисту, а потому что так устроена электроника на физическом уровне.
Шестнадцатеричная - компактная запись байтов
Человеку неудобно читать длинные цепочки нулей и единиц, а разработчику часто нужно видеть содержимое памяти, цвет пикселя или контрольную сумму файла. Шестнадцатеричная система сжимает запись в четыре раза: ровно четыре бита превращаются в один символ hex. Поэтому цвет в CSS записывают как #FF5733, а не как длинную двоичную строку - так короче и меньше шансов ошибиться при чтении.
Восьмеричная - права доступа в Unix
В Linux и других Unix-системах права на файл описываются тремя цифрами вроде 755 или 644 - это и есть восьмеричная запись. Каждая цифра кодирует три бита: чтение, запись и выполнение для владельца, группы и остальных пользователей. Восьмеричная система здесь удобнее двоичной именно потому, что три бита ровно укладываются в одну восьмеричную цифру, без остатка.