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

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

Дальше вы разложите одно число по разрядам, переведёте байт 11010110 в D6 и 214 и поймёте, почему смена записи не меняет само количество.
В статье вы узнаете:
Записи 214, 110101102 и D616 обозначают одно количество. Отличаются цифры и вес позиций. Как слово можно набрать кириллицей или передать кодом, число можно представить в системе с удобным основанием.
В позиционной системе каждый разряд умножается на степень основания. Справа стоит степень 0, затем 1, 2 и так далее. Для записи из цифр dk...d0 в системе с основанием b значение вычисляется так:
В десятичном числе 214 цифра 2 означает две сотни, потому что стоит в разряде 10². В двоичном 11010110 крайняя слева единица означает 27 = 128. В шестнадцатеричном D6 буква D обозначает 13, поэтому D6 = 13 × 16 + 6 = 214.
Основание системы счисления показывает, сколько разных цифр используется до переноса единицы в следующий разряд. В основании 2 нужны 0 и 1, в основании 10 цифры от 0 до 9, в основании 16 к ним добавляются A, B, C, D, E и F.
Нижний индекс нужен, когда запись двусмысленна. Строка 10 означает десять в десятичной системе, два в двоичной и шестнадцать в шестнадцатеричной. Число не изменилось от основания, изменилась интерпретация символов.
Десять удобно связывается с пальцами рук, поэтому такой счёт независимо появлялся в разных культурах. Однако пальцы не предопределили единственный результат. Люди считали дюжинами, группами по двадцать и шестидесять. Следы этих систем остались в 12 месяцах, 60 минутах и 360 градусах.
Сила современной десятичной системы находится не только в основании. Позиционная запись и ноль позволяют кратко кодировать большие числа и выполнять одинаковые письменные алгоритмы. В числе 205 ноль удерживает пустой разряд десятков. Без него 25 и 205 пришлось бы различать другим способом.
Торговля, обучение, измерения и печать закрепили общую запись. Когда цены, документы и учебники используют десятичные числа, переход на другое основание создаёт больше расходов, чем пользы. Привычка становится инфраструктурой.
При этом основание 10 не делает арифметику объективно простой во всех отношениях. Число 10 делится только на 2 и 5, а 12 на 2, 3, 4 и 6. Поэтому дюжины удобны для равных долей. Десятичная система выиграла как общий язык, а не как математический чемпион по каждому критерию.
Перевести произвольную запись между основаниями от 2 до 36 можно в конвертере систем счисления. Он меняет представление, сохраняя числовое значение.
Компьютер не видит символы 0 и 1 внутри провода. Транзисторы и логические элементы работают с напряжением, током и зарядом. Инженер задаёт два допустимых диапазона сигнала и трактует их как логические состояния. Значения между диапазонами оставляют запасом на шум и переход.
Два состояния удобно различать надёжно. Сигнал может немного просесть, нагреться или получить помеху и всё равно остаться внутри правильного диапазона. Схемы с тремя и большим числом уровней возможны, но требуют точнее разделять уровни и усложняют логику, память и производство.
Бинарная логика хорошо совпадает с алгеброй высказываний: ложь и истина, разомкнуто и замкнуто, 0 и 1. Клод Шеннон показал, как операции булевой алгебры описывают релейные и переключательные цепи и позволяют систематически упрощать их. Работа 1938 года связала математическую логику с проектированием цифровых схем. [Shannon, 1938]
Каждый дополнительный бит удваивает число комбинаций. Один бит кодирует два состояния, два бита четыре, восемь бит 256. Поэтому байт принимает значения от 00000000 до 11111111, то есть от 0 до 255 для беззнаковой интерпретации.
Двоичная запись неудобна человеку своей длиной. Десятичное 214 занимает три цифры, двоичное 11010110 восемь. Машине длина подходит, потому что каждый разряд соответствует физически реализуемому состоянию. Человеку нужен более компактный вид той же цепочки битов.
Четыре двоичных разряда дают 2⁴ = 16 комбинаций, ровно столько цифр есть в шестнадцатеричной системе. Поэтому биты можно делить справа налево на группы по четыре и переводить каждую группу независимо.
Разобьём 11010110 на 1101 и 0110. Первая группа равна 13 и обозначается D, вторая равна 6. Получаем D616. Обратный перевод тоже механический: D возвращается в 1101, 6 в 0110.
Байт всегда помещается в две шестнадцатеричные цифры: от 00 до FF. Четыре байта можно записать как восемь цифр. Поэтому шестнадцатеричный вид удобен для адресов памяти, машинных инструкций, дампов файлов, масок и цветов вида #D66A3A.
Шестнадцатеричная система не заставляет процессор считать иначе. Она является человеческой стенографией двоичных данных. Буква F не едет по шине как отдельный физический символ, а обозначает биты 1111.
Механику можно проверить в переводе двоичного числа в шестнадцатеричное. Введите 11010110 и получите D6. Если результат содержит буквы A-F, это обычные цифры со значениями от 10 до 15, а не неизвестные переменные.
Чтобы прочитать двоичную запись, подпишите справа степени двойки: 1, 2, 4, 8, 16, 32, 64, 128. Затем сложите веса позиций, где стоит единица.
Для 110101102 получаем 128 + 64 + 16 + 4 + 2 = 214. Нулевые разряды ничего не добавляют, но сохраняют позиции. Этот расчёт можно сверить в конвертере двоичного числа в десятичное.
Обратный перевод делит целое число на 2 с остатком. Для 214 остатки по шагам равны 0, 1, 1, 0, 1, 0, 1, 1. Их читают снизу вверх и получают 11010110. Перевод десятичного числа в двоичное показывает тот же результат сразу, но ручной алгоритм объясняет происхождение каждого бита.
Для шестнадцатеричного представления можно сначала получить двоичное и сгруппировать биты по четыре. Другой путь делит число на 16 с остатком. 214 ÷ 16 даёт частное 13 и остаток 6, поэтому старший разряд равен D, младший 6.
Дроби требуют отдельного алгоритма. Целую часть делят на основание, дробную умножают на него и последовательно снимают целые части. Некоторые конечные десятичные дроби становятся бесконечными в двоичной системе. Например, 0,110 не имеет конечной двоичной записи, как 1/3 не заканчивается в десятичной.
Последовательность 11111111 сама по себе означает 255 как беззнаковое целое. В дополнительном коде той же длины она может обозначать −1. Биты совпадают, отличается правило интерпретации.
Многобайтовое число также можно хранить старшим или младшим байтом вперёд. Четыре байта 12 34 56 78 читаются по-разному, если программа ожидает иной порядок. Шестнадцатеричный дамп честно показывает байты, но не подписывает структуру данных.
У чисел с плавающей точкой часть битов кодирует знак, часть показатель степени, часть значащие цифры. Отсюда появляются знакомые эффекты вроде 0,1 + 0,2, которое внутри программы не обязано равняться точной десятичной дроби 0,3. Причина находится не в ошибке двоичной арифметики, а в конечном представлении дробей.
Сначала уточните формат, затем переводите основание. Нужно знать длину слова, знак, порядок байтов и тип числа. Иначе правильный перевод битов даст неправильный смысл.
Десятичная, двоичная и шестнадцатеричная системы сосуществуют потому, что обслуживают разные ограничения. Людям нужен общий привычный язык, схемам надёжные состояния, программистам компактный вид битов. Лучшее основание заканчивается там, где меняется задача.
Напишите своё мнение, комментарий или предложение.