Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Category:

хочу-всё-знать-139: отдавая долги

Меня спросили, что такое восьмеричные числа. Я сделал попытку объяснить как можно более простым языком, так, чтобы было понятно не-математикам и не-программистам. Это вышло длиннее, чем позволяет коммент, поэтому выношу в отдельную запись. Если есть замечания или вопросы — пожалуйста.

Для тех, кто знаком с философией математики: я не стыжусь откровенного платонизма, которым пропитано это объяснение. По-моему, только так и можно объяснять для новичков — вне зависимости от того, веришь в него на самом деле или нет. Формализм хорош в тех случаях, когда уже знаешь, о чём идёт речь.


Про восьмеричные числа.

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

Есть много разных систем записи чисел с помощью значков (на бумаге, на экране компьютера итп.); они делятся прежде всего на позиционные и непозиционные. В непозиционных системах есть разные значки для разных чисел, их можно писать вместе, и при этом значение всех значков складывается; но "число" каждого значка не меняется от порядка, в котором они стоят. Например, в римской системе можно записать XV, и это будет 15; но можно написать и VX, и это тоже будет 15. А в привычной нам позиционной системе нельзя переставить местами 15 и 51 - получатся разные числа. Римская система, однако, не полностью непозиционная: заметьте, что IX означает 9, а XI - 11. Т.е. для некоторых значков в ней важен относительный порядок друг от друга.

Самые распостранённые в наше время системы записи чисел - позиционные "арабские", и из них самая распостранённая - десятеричная. Она названа так потому, что значение цифр в числе увеличивается по степеням десятки: например, 372 это 3*100 + 7*10 + 2. Самая правая цифра в числе обозначает "самое себя", вторая с конца - цифра десяток, т.е. обозначает, сколько десяток есть в числе, третья справа - цифра сотен итп.

Мы настолько привыкли к этой системе, что для нас обычно десятеричная запись числа и само число совпадают друг с другом в уме. Т.е., скажем, для нас "число пятнадцать" - это "15", а "XV" - это относительно редкий и необычный способ записи числа 15 римскими цифрами. Но на самом деле "XV" и "15" - равноправны, и то и другое - способ записи какими-то значками абстрактного числа "пятнадцать". Впрочем, "пятнадцать" - тоже всего лишь ещё один способ записи какими-то значками этого числа, как и "fifteen". Само по себе число - абстрактный объект, который можно записать множеством разных способов, просто мы настолько привыкли к десятеричной системе, что воспринимаем её в качестве "главной" в некотором смысле. Но это всего лишь сила традиции и привычки.

В основании десятеричной системы лежит число "десять"; так получилось потому, что у нас на двух руках десять пальцев. Если мы возьмём вместо десяти в основание число "восемь", у нас получится другой способ записывать числа, использующий только восемь цифр: 0,1,2,3,4,5,6,7 (как десятеричная система использует десять цифр 0,1,2,3,4,5,6,7,8,9). Его можно изобразить так:

0 - ноль
1 - один
2 - два
3 - три
4 - четыре
5 - пять
6 - шесть
7 - семь
10 - восемь
11 - девять
12 - десять
13 - одиннадцать
14 - двенадцать
15 - тринадцать
16 - четырнадцать
17 - пятнадцать
20 - шестнадцать
......

Всякий раз, как в каком-то разряде мы доходим до "последней цифры" 7 (в восьмеричной системе), мы переходим на следующем шаге в 0 и сдвигаем на единицу больше следующий разряд. Я специально написал справа названия чисел словами, а не десятеричными цифрами, чтобы не так легко было запутаться. Число в восьмеричной системе можно разбить на разряды так же, как число в десятеричной системе, но разряды в нём будут нести в себе степени восьмёрки, а не десятки:

372 = 3 * сто + 7 * десять + 2

564 = 5 * шестьдесят четыре + 6 * восемь + 4

372 в десятеричной записи и 564 в восьмеричной записи - это одно и то же число, в чём легко убедиться, выполнив описанное выше разложение для 564 как вычисление в привычной десятеричной системе: 5*64+6*8+4 = 372. Запись разная, а число одно и то же, это важно понять.

А если бы для нас привычной была бы восьмеричная система, и мы бы всё обычно делали в ней, то нам было бы легче удостовериться в равенстве этих двух представлений, выполнив разложение 372 в десятичной системе в качестве вычисления в восьмеричной: 3*сто + 7*10 + 2 = (учитывая, что десять в восьмеричной системе записывается как 12, а сто как 144): 3*144 + 7*12 + 2 = 454 + 106 + 2 = 564 (всё в восьмеричной системе).

Все обычные действия с числами, типа умножения столбиком, деления столбиком, сложения-вычитания итп. можно производить с восьмеричными (или двоичными, или двадцатеричными) числами с той же лёгкостью, что и с десятеричными — с той же лёгкостью в принципе; но на практике нам, конечно, намного легче работать в привычной десятеричной системе, чем в любой другой.

Современные компьютеры все записывают информацию с помощью битов, где бит - единица информации, могущая принимать только два разных значения: 0 или 1. Это устроено так потому, что так легче всего представлять информацию в виде элетрического сигнала; например, есть ток - означает 1, а нет тока - означает 0 (или разные уровни напряжения, или наличие/отсутствие электрического заряда, итп.). Учитывая эту особенность компьютеров, оказалось, что легче и эффективнее всего представлять числа в них с помощью двоичной записи, где каждая двоичная "цифра" обозначается с помощью отдельного бита, и каждый разряд в двоичной записи несёт свою степень двойки. Например,

100010 = тридцать четыре, т.к. это 1*(два в пятой степени) + 0*(два в четвёртой степени) + 0*(два в третьей степени) + 0*(два в квадрате) + 1*(два в первой степени) + 0

Но кроме двоичной записи, занимающей много места, логично также использовать любую запись с основой, являющейся степенью двойки, например, восьмеричной (8 = два в третьей степени) или шестнадцатеричной (два в четвёртой степени). Это выходит потому, что при переходе из двоичной степени в восьмеричную, скажем, мы просто собираем двоичные цифры справа налево в группы по три цифры в каждой и переводим их в восьмеричные цифры от 0 до 7:

100010 = 100 010 = 4 2 = 42 (в восьмеричной записи), т.е. 4*8+2 = 34 (в десятеричной записи)

или при переходе из двоичной в шестнадцатеричную, группируем четвёрками:

100010 = 10 0010 = 22 (в 16-ричной записи) = 2*16+2 = 34 (в десятеричной записи).

И наоборот: у нас есть, скажем, число 564 в восьмеричной записи, и мы хотим его перевести в двоичную-битовую. Очень просто: заменяем каждую цифру на её двоичное представление из трёх цифр:

564
5 --> 101
6 --> 110
4 --> 100

564 ---> 101 110 100 = 101110100

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

Из-за всех этих причин восьмеричные и шестнадцатеричные числа и стали столь часто использовать во всём, что связано с компьютерами.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 40 comments