Перевод чисел в разные системы счисления.

952 прочитали

Всем привет, меня зовут Андрей, это снова я!

В данной статье я хочу рассказать о переводе числа в разные системы счисления. Напомню, что те числа, с которыми мы имеем обычно дело, чаще всего представлены в десятичной системе счисления. Это значит, что для записи числа мы используем 10 разных цифр, и эти цифры нам прекрасно известны, от 0 до 9 включительно. Их ровно 10, а потому и система счисления называется десятичная.

Но таких систем счисления, чисто теоретически, может быть бесконечное множество. Если, конечно найти такой уникальный знак для каждой из цифр своей системы счисления. Например, в шестнадцатеричной системе используются цифры от 0 до 9, а также буквы латиницы A, B, C, D, E, F. Буква A означает 10, B – это 11, C – это 12, D – 13, E – 14, F - 15 .

Что же касается всех систем, начиная от двоичной и до десятичной включительно, там есть только цифры, причем максимальная цифра на единицу меньше, чем основание системы счисления (для двоичной системы основание 2, максимальная цифра 1, для десятичной – основание 10, максимальная цифра 9, и так далее). Итак, если двоичная система, то там есть только 2 цифры – 1 и 0.

  • Как достаточно просто перевести число из десятичной системы в двоичную?

Приведем пример. Сейчас 2021-й год. Давайте переведем это самое число, то есть 2021, из десятичной системы в двоичную.

В Excel есть такая функция – ДЕС.В.ДВ. Это так и расшифровывается – десятичное в двоичное. Но у этой функции есть существенный недостаток – можно использовать числа, не больше чем 511 в десятичной системе. Если мы попробуем набрать формулу «=ДЕС.В.ДВ(2021)», то получим ответ: ЧИСЛО, и перед этим словом знак решетки. То есть, данное число слишком большое для данной функции. Еще один недостаток этой функции – она работает только с целыми частями и не работает с дробными, но об этом мы поговорим позже.

А пока продолжим переводить число 2021 в двоичную систему счисления

Итак, откроем Excel , и напишем всего два числа: 2 (потому что мы будем переводить в двоичную систему) и 2021 (потому что именно это число нам надо перевести из десятичной системы в двоичную):

Рисунок 1
Рисунок 1

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

Первым делом заполним ячейку B2 . Там должен быть остаток числа 2021 при делении на 2. Но нужно будет добавить к формуле значок $, чтобы при копировании этой формулы сохранилось обращение к первой строке. Вот какая будет формула для B 2:

=ОСТАТ(A2;B$1)

Результат – единица, и это значит, что последняя цифра в записи числа 2021 в двоичной системе – это именно единица.

Следующий этап – находим целую часть от деления числа 2021 на 2. Если разделить 2021 на 2, то получится 1010,5, целая часть этого числа – ровно 1010. Именно это число и будем вычислять в ячейке A3, и формула будет такая:

=ЦЕЛОЕ(A2/B$1)

Результат – число 1010 (это число в десятичной системе), как его получать, мы уже говорили. Мы делим не просто на 2, а на то число, что в ячейке B1. Почему так удобней – рассмотрим чуть позже.

Что касается следующих этапов расчета – они полностью похожи на те, что мы уже рассмотрели. Каждое следующее число в столбце A – это есть целая часть от деления на 2 предыдущего числа, полученного в столбце A . И каждое число столбца B представляет собой остаток при делении на 2 того числа, что есть в той же строке столбца A. И так до тех пор, пока не получится единица в столбце A. То есть, формулу в A3 мы копируем и вставляем в несколько нижних ячеек столбца A, то же самое можно сказать про формулу в ячейке B2 . Формулу в этой ячейке мы тоже копируем, а затем вставляем в несколько ячеек ниже.

Вот что должно получиться:

Рисунок 2.
Рисунок 2.

Ну и теперь остается последний этап – собрать воедино цифры в столбце B. Начинать будем снизу, то есть с той единицы столбца B, что находится при единице столбца A .

Итоговый результат:

11111100101

Это и есть запись числа 2021 в двоичной системе счисления.

Мы, конечно могли в формулах использовать не « B$1», а просто число 2, результат бы тем же. Но если бы нам пришлось сразу после этого перевести то же число 2021 в другую систему, например, в восьмеричную, то тогда каждую двойку пришлось бы менять на восьмерку. А в нашем случае получить 2021 в восьмеричной системе счисления гораздо проще. Достаточно просто в ячейке B1 мы меняем двойку на восьмерку. вот что получится:

Рисунок 3.
Рисунок 3.

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

А читать число в восьмеричной системе тоже будем снизу вверх. Получится результат:

3745

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

Кстати, можно проверить результат. 3*8^3+7*8^2+4*8^1+5*8^0=1536+448+32+5=2021.

А теперь про то, как перевести в любую систему счисления дробную часть числа. Пусть у нас есть число 0,2021. Ноль целых, две тысячи и двадцать одна десятитысячная. Это в десятичной системе.

Допустим, что надо перевести в двоичную систему. В любом случае, если речь идет о нецелом числе, отдельно переводим целую часть по той методике, что мы уже рассмотрели, а отдельно – дробную часть. С целой частью все понятно, ноль он в любой системе будет ноль. А теперь рассмотрим, как переводить дробную часть.

Начало аналогично тому, когда мы рассматривали целые числа:

Рисунок 4.
Рисунок 4.

Мы выписали нашу дробную часть, и выписали число 2, то есть основание нужной нам системы счисления.

Нам здесь понадобятся не 2, а три столбца.

Что будем делать дальше? Вначале заполним ячейку B2. Формула простая – надо умножить числа в ячейках A2 и B1. Снова единицу предварим значком $. А затем заполним ячейку C2. Там должна быть целая часть того, что получилось в ячейке B2.

Вот что должно получиться:

Рисунок 5.
Рисунок 5.

Что касается следующих строк – там все просто. В столбце A мы берем всегда только дробную часть от предыдущего результата, столбец B – это всегда умножение того, что мы недавно получили, то есть в той же строке в столбце A, на двойку (потому что мы переводим в двоичную систему счисления), столбец C – это целая часть того, что получилось в столбце B . Все сказанное в данном абзаце можно повторять несколько раз, если нам нужна следующая цифра «после запятой». Вот что должно получиться:

Конечный результат читаем по столбцу C, но не снизу вверх, как это было при целых числах, а сверху вниз:

0,2021 в десятичной системе это будет:

0,0011001110111100110... в двоичной системе.

И если мы в ячейке B1 изменим 2 на 8, то получим то же число, но в восьмеричной системе:

Рисунок 6.
Рисунок 6.

Результат:

0,1473632326502607450

Тут почему-то в нескольких строчках получилось больше, чем 4 знака после запятой, хотя мы умножали 8 на число, у которого 8 4 знака после запятой, и должно было получиться не больше, чем 4 знака после запятой. Кстати, говорят, что за подобные ошибки в Excel можно получить реальные деньги. Я пока не знаю, куда подавать заявку, но в любом случае надеюсь, что с помощью этой публикации получится доказать, что первым эту ошибку в Excel заметил именно я). Хотя, возможно, не при каждом умножении числа 8 на 0,8288 будет получаться именно такой результат.

Из-за этого мы даже пришли к такому результату, что все последующие цифры будут нолями. Это связано с изменением чисел на каком-то из этапов, о чем я уже говорил, были добавлены лишние цифры после запятой. Но при наличии столь большого числа знаков «после запятой» погрешность, связанная с появлением лишних цифр, будет очень мала. В любом случае, даже если мы возьмем только две цифры после запятой, то получим: 1/8+4/64 =1/8+1/16=2/16+1/16=3/16, или 0,1875, или на 7,2% меньше, чем 0,2021. А если возьмем три знака, то получим 3/16+7/512 = 32*3/512+7/512=103/512=0,201172, то есть у нас уже погрешность меньше половины процента, и это только при первых трех цифрах. А поскольку мы рассчитали 19 цифр после запятой, то погрешность будет намного меньше, чем один процент. В принципе, подобная погрешность – чисто условная, она напоминает погрешность при вычислении нескольких знаков числа пи. В любом случае, 9 цифр после запятой вычислены без погрешностей.

А на этом пока всё, подписывайтесь на мой канал и до новых встреч!