Все статьи
Числа и сеть

Системы счисления: двоичная, восьмеричная, шестнадцатеричная

Позиционные системы счисления, конвертация между ними, использование в программировании.

30 марта 2025
9 мин чтения
ConvertHub
#счисление#binary#hex

Введение

Системы счисления — это фундамент, на котором построена вся цифровая техника и программирование. Каждый раз, когда вы открываете сайт, нажимаете кнопку или сохраняете файл, внутри процессора происходят операции с числами, представленными в особой форме. Понимание того, как устроены позиционные системы счисления, позволяет программисту эффективнее работать с памятью, битовыми масками, цветовыми кодами и сетевыми адресами.

В этой статье мы подробно разберём четыре основные системы счисления, которые применяются в IT: десятичную, двоичную, восьмеричную и шестнадцатеричную. Вы научитесь переводить числа между ними, поймёте, почему программисты выбрали именно эти системы, и научитесь читать «страшные» значения вроде 0xDEADBEEF или 0o755 без словаря.

Что такое система счисления

Система счисления — это способ записи чисел с помощью определённого набора знаков (цифр) по заданным правилам. Различают два больших класса: позиционные и непозиционные системы. В непозиционной системе значение цифры не зависит от её позиции в числе — классический пример римская нумерация, где символ X всегда означает десять независимо от места.

В позиционной системе значение цифры определяется её позицией (разрядом). Основание системы показывает, сколько различных цифр доступно и во сколько увеличивается вес разряда при сдвиге влево. Так, в привычной нам десятичной системе основание равно 10, а каждый следующий разряд весит в 10 раз больше предыдущего.

Основные характеристики позиционных систем

СистемаОснованиеЦифрыТипичное применение
Десятичная100–9Повседневные вычисления
Двоичная20, 1Аппаратное обеспечение, процессоры
Восьмеричная80–7Права доступа в Unix,legacy-системы
Шестнадцатеричная160–9, A–FЦвета, адреса памяти, байтовые дампы

Двоичная система счисления

Двоичная (бинарная) система использует всего две цифры — 0 и 1. Каждый разряд называется битом, а группа из восьми битов — байтом. Выбор именно этой системы для цифровой электроники не случаен: две цифры идеально соответствуют двум устойчивым состояниям электронного элемента (есть напряжение / нет напряжения, намагничено / не намагничено).

Любое целое число можно представить в двоичном виде. Например, десятичное 42 в двоичной системе записывается как 101010:

1·2⁵ + 0·2⁴ + 1·2³ + 0·2² + 1·2¹ + 0·2⁰
= 32 + 0 + 8 + 0 + 2 + 0
= 42

Двоичная запись компактнее для компьютера, но очень неудобна для человека: даже небольшое значение превращается в длинную цепочку нулей и единиц. Именно поэтому программисты используют «сжатые» варианты — восьмеричную и шестнадцатеричную системы.

Восьмеричная система счисления

Восьмеричная система имеет основание 8 и использует цифры от 0 до 7. Главное достоинство системы — простая связь с двоичной: одна восьмеричная цифра соответствует ровно трём двоичным битам (поскольку 8 = 2³). Это делает перевод между системами практически мгновенным.

Восьмеричная система широко применялась в ранних компьютерах, где машинное слово делилось на группы по 3 бита. Сегодня её основной остаток — запись прав доступа к файлам в Unix-подобных системах. Командаchmod 755 file устанавливает права, где каждая цифра описывает уровень доступа:

7 = rwx  (чтение + запись + исполнение)
5 = r-x  (чтение + исполнение)
5 = r-x  (чтение + исполнение)

Владелец: 7  Группа: 5  Остальные: 5

Шестнадцатеричная система счисления

Шестнадцатеричная система (hex) использует 16 знаков: цифры 0–9 и буквыA–F (или a–f) для значений 10–15. Одна hex-цифра соответствует четырём битам (16 = 2⁴), то есть половине байта — так называемой «тетраде» или «нибблу».

Шестнадцатеричная запись — стандарт де-факто для представления байтовых данных. Цвета в CSS задаются в формате #RRGGBB, MAC-адреса сетевых карт записываются через двоеточие, а отладчики памяти показывают содержимое в виде hex-дампов.

ДесятичнаяДвоичнаяВосьмеричнаяШестнадцатеричная
0000000
7011177
10101012A
15111117F
16100002010
25511111111377FF
1024100000000002000400

Перевод между системами счисления

Существует несколько универсальных методов перевода. Самый простой и наглядный — перевод через десятичную систему как промежуточное звено. Алгоритм перевода числа из системы с основанием N в десятичную состоит в разложении числа по степеням основания.

Пример: шестнадцатеричное 2AF в десятичное

2AF₁₆ = 2·16² + A·16¹ + F·16⁰
      = 2·256 + 10·16 + 15·1
      = 512 + 160 + 15
      = 687₁₀

Обратный перевод (из десятичной в произвольную) выполняется методом последовательного деления на основание: остатки от деления, прочитанные снизу вверх, и дают искомое число. Для перевода между двоичной, восьмеричной и шестнадцатеричной системой можно использовать более быстрый «групповой» метод.

Быстрый перевод через группы битов

Двоичное:  1101 0111 1010 0011
Группы по 4 бита → hex:   D 7 A 3   = 0xD7A3

Группы по 3 бита → oct: 1 101 011 110 100 011
                        1   5   3   6   4   3  = 0o153643

Этот приём работает мгновенно, потому что основания 8 и 16 являются степенями двойки. Для практики попробуйте бесплатный конвертер из десятичной в шестнадцатеричную, чтобы быстро проверять свои вычисления.

Системы счисления в программировании

Современные языки программирования поддерживают литералы в нескольких системах счисления. В JavaScript, TypeScript, Python, C и многих других языках используются следующие префиксы:

// JavaScript / TypeScript
0b1010   // двоичная, равно 10
0o755    // восьмеричная, равно 493
255      // десятичная
0xFF     // шестнадцатеричная, равно 255

// Преобразование в строку
(255).toString(2)   // "11111111"
(255).toString(16)  // "ff"
(255).toString(8)   // "377"

Знание систем счисления пригождается при работе с цветовыми моделями: например, RGB-цветrgb(13, 110, 253) записывается в CSS как #0d6efd, где каждая пара hex-цифр кодирует один из каналов. Побитовые операции (&, |, ^, <<, >>) также требуют уверенного владения двоичным представлением чисел.

Типичные ошибки при работе с системами счисления

  • Использование недопустимых цифр — например, запись 08 или 09 в восьмеричной системе.
  • Путаница между префиксами 0, 0x и 0b в разных языках.
  • Забывание про старший бит знака при работе с отрицательными числами в дополнительном коде.
  • Игнорирование порядка байтов (endianness) при чтении hex-дампов сетевых пакетов.

Арифметика в различных системах счисления

Арифметические операции в любой позиционной системе выполняются по тем же правилам, что и в десятичной: сложение столбиком, умножение с переносом, деление «уголком». Разница лишь в том, что перенос возникает при достижении основания системы, а не десятки. Например, в двоичной системе 1 + 1 = 10(единица переходит в старший разряд), в восьмеричной 7 + 1 = 10, а в шестнадцатеричнойF + 1 = 10.

Сложение в двоичной:
  10110
+ 11011
-------
 110001
(по разрядам: 0+1=1, 1+1=10, 1+0+1=10, 0+1+1=10, 1+1+1=11)

Сложение в шестнадцатеричной:
  3F
+ 27
---
  66
(F + 7 = 16 = 10₁₆ → 0, перенос 1; 3 + 2 + 1 = 6)

На практике арифметику вручную почти не выполняют — для этого есть калькуляторы и функции языка. Однако понимание принципов помогает предсказать результаты побитовых операций, оценивать переполнения и понимать, почему число «не помещается» в выбранный тип данных.

История систем счисления

Десятичная система стала общепринятой не из-за математического совершенства, а благодаря тому, что у человека десять пальцев на руках — это естественный «счётный инструмент». Древние цивилизации использовали и другие основания: шумеры и вавилоняне — шестидесятеричную систему (отголоски которой сохранились в делении часа на 60 минут и градуса на 60 минут), майя — двадцатеричную.

Двоичная система была впервые описана Готфридом Лейбницем в 1703 году в работе «Explication de l'Arithmétique Binaire». Лейбниц увидел в ней философский смысл — единицу как бытие и ноль как ничто. Однако практическое применение двоичная система нашла лишь в XX веке, когда Клод Шеннон показал, что булева алгебра идеально подходит для проектирования электрических схем. С тех пор двоичная система стала основой всей цифровой техники.

Заключение

Системы счисления — это не абстрактная математика, а рабочий инструмент любого разработчика, системного администратора и специалиста по кибербезопасности. Двоичная система показывает, как устроена «начинка» компьютера, восьмеричная помогает читать права доступа, а шестнадцатеричная делает удобной работу с байтами, цветами и адресами.

Чтобы закрепить материал на практике, попробуйте перевести число из десятичной в двоичную или обратно, а затем сверьте результат с нашими конвертерами. Регулярная практика помогает быстро развить интуицию и читать числа в любой системе счисления так же свободно, как и привычные десятичные значения.

Попробуйте эти инструменты

Похожие статьи