СИСТЕМЫ ИСЧИСЛЕНИЯ

 

·        Позиционные системы исчисления

·        Дробные числа в двоичной системе счисления

 

Совокупность приемов наименования и обозначение чисел называется системой исчисления. В качестве условных знаков для записи чисел используются цифры.

Система исчисления, в которой значение каждой цифры в произвольном месте последовательности цифр, обозначающей запись числа, не изменяется, называется непозиционной.

Система исчисления, в которой значение каждой цифры зависит от места в последовательности цифр в записи числа, называется позиционной.

Чтобы определить число, недостаточно знать тип и алфавит системы исчисления. Для этого необходимо еще использовать правила, которые позволяют по значениям цифр установить значение числа. Простейшим способом записи натурального числа является изображение его с помощью соответствующего количества палочек или черточек. Таким способом можно обозначить небольшие чисел. Следующим шагом было изобретение специальных символов (цифр). В непозиционной системе каждый знак в записи независимо от места означает одно и то же число. Хорошо известным примером непозиционной системы исчисления является римская система, в которой роль цифр играют буквы алфавита: І - один, V - пять, Х - десять, С - сто, L - пятьдесят, D -пятьсот, М - тысяча. Например, 324 = СССХХІ. В непозиционной системе исчисления арифметические операции выполнять неудобно и сложно.

 

Позиционные системы исчисления

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

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

130678=1*105+3*104+0*103+6*102+7*101+8

Здесь 10 служит основой системы исчисления, а показатель степени - это номер позиции цифры в записи числа (нумерация ведется слева на право, начиная с нуля). Арифметические операции в этой системе выполняют по правилам, предложенным еще в средневековье. Например, складывая два многозначных числа, применяем правило сложения столбиком. При этом все сводится к сложению однозначных чисел, для которых необходимо знать таблицу сложения.

Проблема выбора системы исчисления для представления чисел в памяти компьютера имеет большое практическое значение. В случае ее выбора обычно учитываются такие требования, как надежность представления чисел при использовании физических элементов, экономичность (использование таких систем исчисления, в которых количество элементов для представления чисел из некоторого диапазона было бы минимальном). Для изображения целых чисел от 1 до 999 в десятичной системе достаточно трех разрядов, то есть трех элементов. Поскольку каждый элемент может находиться в десяти состояниях, то общее количество состояний - 30, в двоичной системе исчисления: 99910=11111002, необходимое количество состояний - 20 (индекс внизу числа - основа системы исчисления).

Более распространенной для представления чисел в памяти компьютера является двоичная система исчисления. Для изображения чисел в этой системе необходимо две цифры: 0 и 1, то есть достаточно двух стойких состояний физических элементов. Эта система близка к оптимальной по экономичности, и кроме того, таблицы сложения и умножения в этой системе элементарные:

+

0

1

 

*

0

1

0

0

1

 

0

0

0

1

1

10

 

1

0

1

Поскольку 23=8, а 24=16, то каждых три двоичных разряда числа образовывают один восьмиричный, а каждых четыре двоичных разряда - один шестнадцатиричный. Поэтому для сокращения записи адресов и содержимого оперативной памяти компьютера используют шестнадцатиричную и восьмиричную системы исчисления. Ниже, в таблице 1 приведены первые 16 натуральных чисел записанных в десятичной, двоичной, восьмиричной и шеснадцатиричной системах исчисления.

 

Таблица 1

10

2

8

16

0

0000

0

0

1

0001

1

1

2

0010

2

2

3

0011

3

3

4

0100

4

4

5

0101

5

5

6

0110

6

6

7

0111

7

7

8

1000

10

8

9

1001

11

9

10

1010

12

A

11

1011

13

B

12

1100

14

C

13

1101

15

D

14

1110

16

E

15

1111

17

F

Для отладки программ и в других ситуациях в программировании актуальной является проблема перевода чисел из одной позиционной системы исчисления в другую. Если основа новой системы исчисления равняется некоторой степени старой системы исчисления, то алгоритм перевода очень простой: нужно сгруппировать справа налево разряды в количестве, равном показателю степени и заменить эту группу разрядов соответствующим символом новой системы исчисления. Этим алгоритмом удобно пользоваться при переводе числа из двоичной системы исчисления в восьмиричную или шестнадцатиричную. Например, 101102=10 110=268, 10111002=101 1100=5C8

Перевод чисел из восьмиричной или шестнадцатиричной систем исчисления в двоичную происходит по обратному правилу: один символ старой системы исчисления заменяется группой разрядов новой системы исчисления, в количестве равном показателю степени новой системы исчисления. Например, 4728=100 111 010=1001110102, B516=1011 0101=101101012

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

Алгоритмы перевода чисел из одной позиционной системы исчисление в другую

1. Для перевода чисел из системы исчисления с основой p в систему исчисления с основой q, используя арифметику новой системы исчисления с основой q, нужно записать коэффициенты разложения, основы степеней и показатели степеней в системе с основой q и выполнить все действия в этой самой системе. Очевидно, что это правило удобно при переводе в десятичную систему исчисления. Например:

из шестнадцатиричной в десятичную:

92C816=9*10163+2*10162+C*10161+8*10160= 9*16103+2*16102+12*16101+8*16100=37576

из восьмиричной в десятичную:

7358=7*1082+3*1081+5*1080= 7*8102+3*8101+5*8100=47710

из двоичной в десятичную:

1101001012=1*1028+1*1027+0*1026+1*1025+0*1024+0*1023+1*1022+0*1021+1*1020 = 1*2108+1*2107+0*2106+1*2105+ 0*2104+0*2103+1*2102+0*2101+ 1*2100=42110

2. Для перевода чисел из системы исчисления с основой p в систему исчисления с основой q с использованием арифметики старой системы исчисления с основой p нужно:

·                     для перевода целой части:

o         последовательно число, записанное в системе основой делить на основу новой системы исчисления, выделяя остатки. Последние записанные в обратном порядке, будут образовывать число в новой системе исчисления;

·                     для перевода дробной части:

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

Этим же правилом удобно пользоваться в случае перевода из десятичной системы исчисления, поскольку ее арифметика для нас привычна.

Пример: 999,3510=1111100111,010112

 

Дробные числа в двоичной системе счисления

 

А не записать ли нам в двоичной системе счисления число пи?

А. Алешин

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

Запишем формулу представления дробного числа в позиционной системе счисления: 

Ap=an-1·pn-1+an-2·pn-2+ ... +a1·p1+a0·p0 +a-1·p-1+a-2·p-2+ ... +a-m·p-m,

В случае десятичной системы счисления получим: 

24,732 = 2·101+4·100+7·10-1+3·10-2

Перевод дробного числа из двоичной системы счисления в десятичную производится по следующей схеме: 

101101,1012 = 1·25+0·24+1·23+1·22+0·21+1·20+1·2-1+0·2-2+1·2-3=45,625

Перевод дробного числа из десятичной системы счисления в двоичную осуществляется по следующему алгоритму:

  Вначале переводится целая часть десятичной дроби в двоичную систему счисления;

  Затем дробная часть десятичной дроби умножается на основание двоичной системы счисления;

  В полученном произведении выделяется целая часть, которая принимается в качестве значения первого после запятой разряда числа в двоичной системе счисления;

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

Пример: Требуется перевести дробное десятичное число 206,116 в дробное двоичное число.

Перевод целой части дает 20610=110011102 по ранее описанным алгоритмам; дробную часть умножаем на основание 2, занося целые части произведения в разряды после запятой искомого дробного двоичного числа: 

.116 • 2 = 0.232

.232 • 2 = 0.464

.464 • 2 = 0.928

.928 • 2 = 1.856

.856 • 2 = 1.712

.712 • 2 = 1.424

.424 • 2 = 0.848

.848 • 2 = 1.696

.696 • 2 = 1.392

.784 • 2 = 0.784

и т.д.

Получим: 20610=11001110,00011101102

Арифметические операции в различных системах счисления производятся по тем же правилам, что и в десятичной с.ч.

если результат поразрядного сложения в каждом разряде меньше основания системы счисления, т.е. аi + bi, < р,

то в соответствующий разряд суммы записывается цифра, которая отображает количество, равное ci = ai + bi

В том случае, если результат поразрядного сложения больше основания системы счисления или равен ему, т.е.

аi + bi, > р,  то в соответствующий разряд суммы записывается цифра, которая отображает количество, равное:

Ci ai + bi - p

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

Пример 1. Сложим числа 15 и 6 в различных системах счисления

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image001.gif

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image002.jpg

Ответ: 15+6 = 2110 = 101012 = 258 = 1516

Шестнадцатеричная: F16+616

 

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image003.jpg

 

Проверка. Преобразуем полученные суммы к десятичному виду:
101012 = 24 + 22 + 20 = 16+4+1=21, 
258 = 2*81 + 5*80 = 16 + 5 = 21, 
1516 = 1*161 + 5*160 = 16+5 = 21.

 

Пример: Сложим числа 141,5 и 59,75.

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image004.gif

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image005.gif

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image006.gif

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image007.jpg

Ответ: 141,5 + 59,75 = 201,2510 = 11001001,012 = 311,28 = C9,416

Проверка. Преобразуем полученные суммы к десятичному виду: 
11001001,012 = 27 + 26 + 23 + 20 + 2-2 = 201,25 
311,28 = 3*82 + 1•81 + 1*80 + 2*8-1 = 201,25 
C9,416 = 12*161 + 9*160 + 4*16-1 = 201,25

Вычитание

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image008.gif

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image009.jpg

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image010.gif

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image011.gif

Ответ: 201,2510 - 59,7510 = 141,510 = 10001101,12 = 215,48 = 8D,816.

Проверка. Преобразуем полученные разности к десятичному виду: 
10001101,12 = 27 + 23 + 22 + 20 + 2-1 = 141,5; 
215,48 = 2*82 + 1*81 + 5*80 + 4*8-1 = 141,5; 
8D,816 = 8*161 + D*160 + 8*16-1 = 141,5.

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

 


Умножение в двоичной системе

Умножение в восьмеричной системе

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image013.gifОписание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image012.gif

Примеp: Перемножим числа 115 и 51.

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image014.gif

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image015.gif

Ответ: 115*51 = 586510 = 10110111010012 = 133518.

Проверка. Преобразуем полученные произведения к десятичному виду: 
10110111010012 = 212 + 210 + 29 + 27 + 26 + 25 + 23 + 20 = 5865; 
133518 = 1*84 + 3*83 + 3*82 + 5*81 + 1*80 = 5865.

Деление

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

Пример Разделим число 5865 на число 115.

 

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image016.gif

Описание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image017.jpgОписание: Описание: Описание: http://www.tkptis.ru/inftest/inf/img/4.files/image018.gif

Восьмеричная: 133518 :1638

Ответ: 5865 : 115 = 5110 = 1100112 = 638.

Проверка. Преобразуем полученные частные к десятичному виду: 
1100112 = 25 + 24 + 21 + 20 = 51; 638 = 6*81 + 3*80 = 51.

 

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