7,4K подписчиков

Быстрый перевод между системами счисления с основаниями 2, 4, 8, 16...

8,3K прочитали

Когда я разбирал быстрый и точный перевод из десятичной системы в двоичную с использованием разрядов, я обещал, что напишу, как быстро переводить без десятичной системы между двоичной, восьмеричной, шестнадцатиричной системами (часто те, кто хорошо знает метод "деления уголком", переводят сначала в десятичную, а потом в нужную новую). И вот эта статья перед Вами. В ней я не только дам этот метод (он и так валяется везде в интернете), но и опишу его принцип и объясню, почему перевод 2<->8 работает, а 2<->10 или 8<->16 - нет. Как обычно, самое интересное - в конце.

Поехали

Метод

Очень простой: заменяем цифры в записи справа налево в соответствии с нужной таблицей:

Таблица для перевода
Таблица для перевода

Теперь всё очень просто, как это - туда, а то - сюда: в 16-ричной системе каждая цифра будет заменена на 4 двоичных и наоборот - каждые 4 двоичных цифры будут заменяться на одну 16-ричную.

Если требуется перевести из 8-ричной в 16-ричную, то перевод осуществляем через двоичную (8->2->16).

Пример: 7F21 из 16-ричной в двоичную. "1" заменим на "0001" , "2" - на "0010", "F" - на "1111" и "7" - на "0111": "(0111)(1111)(0010)(0001)". Лидирующий (левый) ноль стираем: 111111100100001. Профит. Можно так же быстро в восьмеричную: (111)(111)(100)(100)(001)-77441_8

Теперь -

Как это устроено

Всё дело в волшебных... разрядах. Разряды идут:

Разряды в разных системах счисления
Разряды в разных системах счисления

Смотрите, они одинаковые. В четверичной используется каждый второй двоичный разряд, в восьмеричной - каждый третий, а в 16-ричной - каждый четвёртый. Для разбора, как это работает я возьму пример перевода из 8й системы в двоичную. Сделаем заготовку для двоичной:

По традиции я сразу записал  веса разрядов в исходном восьмеричном числе и в двоичной заготовке
По традиции я сразу записал веса разрядов в исходном восьмеричном числе и в двоичной заготовке

Теперь можно просто "перенести" цифры:

Когда я разбирал быстрый и точный перевод из десятичной системы в двоичную с использованием разрядов, я обещал, что напишу, как быстро переводить без десятичной системы между двоичной, восьмеричной,-4

Запись получилась не двоичная, но так и должно быть. Посмотрите, в двоичной системе ни один разряд не может браться 2,3,4 и более раз, а у нас 64 берётся 7 раз. Вспомним болты, гайки и шайбы, которые разменивались друг на друга пачками. Пусть у нас болт стоит 256, гайка - 128, а шайба - 64 с порогом размена по 2 (двоичная же система) . Имеем по факту 7 шайб. 7 шайб можно разменять на 3 гайки и одна шайба останется (каждую гайку за 2 шайбы):

Размен 6 "шайб" на 3 "гайки"
Размен 6 "шайб" на 3 "гайки"

Та же участь ждёт гайки. Из трёх гаек можно взять 2 и разменять на 1 болт:

Размен "7" прошёл до конца
Размен "7" прошёл до конца

Теперь надо так же разменять "4". Четыре "восьмёрки" (шайбы) разменяется ровнёхонько на один по "32" (болт)

перевод почти завершён
перевод почти завершён

В те разряды, которые не задействованы, ставим 0.

перевод завершён на 100%
перевод завершён на 100%

Из этого примера видно, почему в восьмеричной системе используются группы по три цифры - один восьмеричный разряд прекрасно разменивается на три двоичных. В общем-то, понятно, что при переводе 2-4 и 4-2 будут группы по две цифры, потому что в четверичной системе каждый второй двоичный разряд

Техника перевода будет работать и в других парах систем счисления, где разряды совпадают. Тут важно, чтобы каждый разряд старшей системы обязательно встречался среди разрядов младшей. Например, троичная-девятиричная:

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

Напрямую можно переводить и между четверичной и 16-ричной. А вот десятичная тут ущербная. Её разряды не встречаются ни в одной другой "практически полезной" системе: ...-1000-100-10-1. Здесь есть корреляция с простыми делителями (не даром есть метод "деления уголком") оснований систем счисления. У чисел 4, 8, 16 и т.д. делитель только один - двойка. Поэтому и разряды в них только из двоичной системы. Для девятки делитель тоже только один - тройка. А вот у десятки сразу два простых делителя. Это 5 и 2. Значит, у "сродной" системы к десятичной будут делители основания 25 и 4 (квадраты), а это только 100-ричная.

Напоследок

Подарю пример перевода между системами 2->10 с помощью "деления уголком". Не из десятичной в двоичную, а наоборот. Метод настолько универсальный, что работает даже там. Делим уголком 111001001 на 1010 (в двоичной системе так записывается основание "нашей" десятичной системы) и записываем остатки в обратном порядке:

Перевод "уголком" из двоичной системы в десятичную.
Перевод "уголком" из двоичной системы в десятичную.

Вдруг, кому пригодится деление в двоичной системе. Я хотел сначала в девятиричную перевести (надо было делить на 1001), но это неспециалисту проверить труднее.