Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика (конспект лекций)

.pdf
Скачиваний:
58
Добавлен:
30.03.2015
Размер:
381.73 Кб
Скачать

Переведем в семеричную систему число 20110.

Выполним необходимую последовательность операций деления числа 201 на ос- нование семеричной системы B = 7:

201:7 = 28, 28:7 = 4, 4:7 = 0,

востатке 5,

востатке 0,

востатке 4.

Таким образом, 20110 = 4057.

Переведем в шестнадцатеричную систему число 690010.

Выполним необходимую последовательность операций деления числа 6900 на основание шестнадцатеричной системы B=16:

6900:16 = 431, 431:16 = 26, 26:16 = 1, 1:16 = 0,

Получается 690010 = 1AF416.

востатке 4,

востатке 15 (это значение цифры F),

востатке 10 (это значение цифры A),

востатке 1.

Перевод дробной части числа

Дробная часть числа в системе с основанием B есть позиционная дробь

0,a-1a-2…a-k,

записанная цифрами этой системы счисления и обозначающая сумму

a-1 B-1 + a-2 B-2 + … + a-k B-k,

(7)

которая, очевидно, лежит в промежутке от 0 до 1.

Нетрудно догадаться, что значение цифры a-1 можно извлечь путем умножения величины (7) на основание B. Результат умножения составляет величину a-1 + a-2 B-1 + … +a-k B-k+1 , и его целая часть представляет собой искомое значение цифры a-1. Вычитая целую часть, вновь получим величину между нулем и единицей, из которой таким же путем можно будет извлекать следующие цифры. Процесс про- должается до тех пор, пока не будет получена нулевая дробная часть или пока не бу- дет достигнута приемлемая точность представления дроби.

Заметим, что в этом процессе искомые цифры открываются нами в прямом по- рядке, т. е. в порядке записи их в числе, слева направо.

Примеры. Переведем в двоичную систему дробь 0,37510.

Выполним для этого следующую последовательность операций умножения дро- би 0,37510 на основание двоичной системы B = 2:

0,375×2 = 0,75; целая часть равна 0, 0,75×2 = 1,5; целая часть равна 1 (вычитаем целую часть из результата),

0,5×2 = 1,0; целая часть равна 1 (вычитаем ее из результата, остается 0).

Т.к. достигнута нулевая дробная часть, то перевод заканчивается получением точного двоичного представления дроби: 0,37510 = 0,0112.

11

Переведем в двоичную систему дробь 0,110.

По аналогии с предыдущим примером получаем двоичные цифры дроби с помо- щью следующей цепочки операций:

0,1×2 = 0,2; целая часть равна 0, 0,2×2 = 0,4; целая часть равна 0, 0,4×2 = 0,8; целая часть равна 0,

0,8×2 = 1,6; целая часть равна 1 (вычитаем ее из результата, остается 0,6), 0,6×2 = 1,2; целая часть равна 1 (вычитаем ее из результата, остается 0,2), 0,2×2 = 0,4; целая часть равна 0,

. . . . . . . . . .

Очевидно, что поскольку последняя строка цепочки совпадает со второй, то да- лее все будет повторяться периодически. Таким образом,

0,110 = 0,0(0011)2 ≈ 0,00011001100110011001100112.

Период двоичной дроби выделен здесь круглыми скобками. Зная формулу для вычисления суммы геометрической прогрессии, нетрудно проверить, что бесконеч- ная двоичная дробь 0,0(0011)2 в точности равна 0,110. Предлагаем в качестве уп- ражнения сделать такую проверку самостоятельно.

1.3.3 Несколько замечаний о технике перевода чисел

Почему способ перевода чисел зависит от направления перевода

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

в десятичную систему счисления с другой?

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

Когда число переводится из другой системы счисления в десятичную, то его не- десятичные цифры мы сразу заменяем их десятичными значениями; все последую- щие вычисления проводятся в десятичной системе.

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

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

Если бы мы предпочитали делать вычисления в другой системе счисления, на- пример, в двоичной, то правила перевода были бы ориентированы на нее. Тогда для перевода числа 12510 в двоичную форму мы сразу заменили бы все «неудобные» де- сятичные цифры 1, 2 и 5 их двоичными значениями 1, 10 и 101 соответственно. По-

12

скольку основание B=1010 «неудобной» десятичной системы счисления запишется при этом как двоичное число B=10102, то наш расчет будет выглядеть так:

12510=1× (1010)2 + 10× (1010)+101 = 1100100+10100+101 =11111012.

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

Перевод чисел из системы счисления с основанием B1 ¹ 10 в систему с основанием B2 ¹ 10

Сначала можно перевести число из одной любой системы счисления в деся- тичную систему, потом из десятичной системы в любую другую.

Переведем, например, семеричное число 257 в троичную систему.

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

257 = 2×7 +5 = 1910.

Затем из десятичной в троичную: 19:3 = 6 (1), 6:3 =2(0), 2:3 = 0(2). В скобках записаны остатки от деления. В итоге получаем 257 = 2013.

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

Таблица первых шестнадцати двоичных чисел

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

ными данными при изучении информатики полезно знать наизусть первые несколь- ко степеней числа 2 (хотя бы от 20 = 1 до 210 = 1024).

Степени числа B в системе с основанием B записываются в виде круглых чисел: B0 = 1B, B1 = 10B, B2 = 100B, B3 = 1000B , ... , т. е. nя степень основания системы счисления представляется в ней числом, составленным из единицы и n нулей. Это легко видеть из ключевого полинома (5). Отрицательная степень B-n записывается в виде позиционной дроби, содержащей единицу в n-м разряде после запятой (и нули в других разрядах).

13

Таблица 1 – Первые 16 чисел в системах с основаниями B = 2, B = 8 и B = 16

Десятичное

Двоичное число

Восьмеричное число

Шестнадцатеричное

число

(B = 2)

(B = 8)

число (B = 16)

0

0

0

0

1

1

1

1

2

1 0

2

2

3

1 1

3

3

4

1 0 0

4

4

5

1 0 1

5

5

6

1 1 0

6

6

7

1 1 1

7

7

8

1 0 0 0

1 0

8

9

1 0 0 1

1 1

9

10

1 0 1 0

1 2

A

11

1 0 1 1

1 3

B

12

1 1 0 0

1 4

C

13

1 1 0 1

1 5

D

14

1 1 1 0

1 6

E

15

1 1 1 1

1 7

F

Перевод чисел в случае оснований, равных степени числа два

Основания восьмеричной и шестнадцатеричной систем счисления выражаются целой степенью двух (8 = 23, 16 = 24). Этим объясняется простота перевода чисел из данных систем в двоичную систему счисления.

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

735,248 ® 111 011 101, 010 1002.

Удостоверимся в правильности такого перевода, применяя ключевой полином:

735,248 = (7×82 + 3×81 + 5×80 + 2× 8-1 + 4×8-2 )10 = = (111×10002 + 011×10001 + 101×10000 + 010×1000-1 + 100×1000-2 )2 =

=(111 000 000 + 011 000 + 101 + 0, 010 + 0, 000100)2 = 111 011 101, 010 1002.

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

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

А3В,С916 ® 1010 0011 1011, 1100 10012

(см. табл. 1).

14

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

001 111,101 0102 → 17,528; 0101 1100,1011 01102 → 5С,В616 .

Отсюда вытекает и простое общее правило перевода чисел из системы с основа- нием B1 = 2n в систему с основанием B2 = 2m. Для перевода чисел между такими системами удобно в качестве «промежуточной станции» использовать двоичную систему счисления. Пусть, например, требуется перевести число 232130,14 в шест- надцатеричную систему счисления. Для этого сначала переведем число в двоичную систему, заменяя в нем цифры двухразрядными двоичными числами:

232130,14 = 10 11 10 01 11 00, 012 .

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

10 11 10 01 11 00, 012 = 1011 1001 1100, 01002 = B9C,416.

Получается, что 232130,14 = B9C,416.

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

Шестнадцатеричная система часто используется и просто в качестве стандарта для компактной записи длинных двоичных чисел. Так, например, любое 16-разрядное двоичное число слово») изображается всего лишь четырьмя симво- лами от 0 до F, а восьмиразрядное байт») – только двумя.

1.4 Признаки делимости

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

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

справедливость получаемых таким образом признаков мы можем на основании все того же ключевого полинома (5). Естественно, цифры дробной части в полиноме будут отсутствовать.

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

15

Цифровая запись двоичного числа am am-1…a1 a0, составленная из цифр 0 и 1,

обозначает величину

n = am2m + am-12m-1 + …+ a222 + a12 + a0.

(8)

Здесь все слагаемые, кроме последнего, делятся на 2 при любых значениях цифр. Последнее слагаемое цифра a0 делится на 2 только при a0 = 0. Отсюда следует, что целое двоичное число делится на 2 без остатка тогда и только тогда, когда оно заканчивается цифрой 0. Подобным образом устанавливается и более общий при-

знак делимости двоичного числа на 2p: двоичное число делится на 2p тогда и толь- ко тогда, когда оно заканчивается p нулями. Здесь мы видим явную аналогию меж-

ду ролью числа 2 в двоичной системе и числа 10 – в десятичной.

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

лимости двоичных чисел можно формулировать посредством таких компактных представлений.

Например, для определения признака делимости двоичного числа на 3 попробу- ем опереться на аналогию между ролью числа 3 в четверичной системе счисления где оно является старшей цифрой и числа 9 в десятичной системе. Может быть, и признак делимости на три в четверичной системе будет столь же простым, как при- знак делимости на девять в десятичной системе? Сформулируем такую гипотезу:

четверичное число делится на 3 тогда и только тогда, когда сумма его цифр де-

лится на 3. Проверяя это правило для чисел 34, 124, 214, 304 , … , (десятичные 3, 6, 9, 12, …), обнаруживаем подтверждения нашей гипотезы. Доказательство этого най- денного с помощью метода аналогий правила делимости не сложно, но лежит не- сколько в стороне от нашей основной тематики, поэтому здесь не приводится. Для желающих найти доказательство самостоятельно даем подсказку: нужно предста- вить четверичное число в виде ключевого полинома и использовать тот факт, что 4m –1 делится на три.

Итак, двоичное число делится на 3 тогда и только тогда, когда сумма цифр его четверичной записи делится на три. Например, 1 11 00 10 10 01 102 = 1302124 делит- ся на 3.

Используя метод аналогий, можно сформулировать, а затем и доказать, признак делимости двоичного числа на 7 (сумма цифр его восьмеричного представления должна делиться на три) и на 15 (сумма цифр шестнадцатеричного представления числа должна делиться на 15). Заметим, что признак делимости на 7 для двоичного числа получается более простым, чем для числа десятичного.

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

Предлагаем по аналогии с признаком делимости на 5 сформулировать признак делимости двоичного числа на 9 (через его восьмеричное представление).

16

2 ДВОИЧНАЯ АРИФМЕТИКА

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

Леонтий Филиппович Магницкий

2.1 Алгоритмы арифметических действий

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

Алгоритмы выполнения арифметических операций в десятичной системе счис- ления стали известны в Европе после перевода на латинский язык в XII веке осно- вополагающих трактатов по арифметике и алгебре, которые написал среднеазиат- ский ученый Аль-Хорезми Мухаммед бен Муса (787 – ок. 850). Происхождение сло- ва «алгоритм», или «алгорифм», восходит к латинской транслитерации «algorismus» от имени этого ученого. А слово «алгебра» берет начало от названия его «Книги о восстановлении и противопоставлении» – «Китаб аль-джебр валь-мукабала».

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

Отсюда однозначно определяются правила переноса из младших разрядов в старшие при сложении чисел и правила заема из старших разрядов в младшие при вычита- нии.

Рассмотрим основные правила двоичной арифметики подробнее.

2.1.1 Сложение

Поскольку цифрами двоичных чисел могут быть только 0 и 1, таблица сложения цифр содержит всего четыре строки:

0 + 0 = 0,

0 + 1 = 1,

1 + 0 = 1,

1 + 1 = 10.

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

Заметим, что если в данном разряде в обоих суммируемых числах находятся единицы и еще поступает единица переноса из предыдущего разряда, то результа-

17

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

10110 + 11110

110100.

Рекомендуем проделать это сложение «в столбик» два-три раза подряд, никак не интерпретируя значений двоичных чисел, а только используя таблицу сложения (на память, механически). Напомним, что двоичные результаты 10 и 11 можно при этом называть «десять» и «одиннадцать». После таких просчетов становится очевидным, насколько простой операцией является сложение чисел в двоичной системе.

2.1.2 Умножение

Таблица умножения в двоичной системе еще проще:

0 × 0 = 0,

0 × 1 = 0,

1 × 0 = 0,

1 × 1 = 1.

При умножении разрядов переносов не возникает. Однако все умножение «в столбик» двух чисел приводит к сложению нескольких сдвинутых друг относитель- но друга двоичных чисел. В ЭВМ они прибавляются в сумматор по одному, поэтому там больше двух чисел сразу в сложении не участвуют. Но нам, при решении при- меров на бумаге, для экономии места и времени приходится суммировать разряды сразу нескольких двоичных чисел. Это как раз один из тех случаев, когда помогает хорошее знакомство с первыми двоичными числами (см. таблицу 1).

Выполним, например, такое умножение:

10111

×11011

10111

10111

10111

10111 .

1001101101.

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

Как видно из примера, умножение в двоичной системе счисления сводится к операциям сдвига множимого и сложения.

18

2.1.3 Вычитание

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

С учетом правила заема получается такая таблица двоичного вычитания:

0 - 0 = 0,

0 - 1 = 1,

1 - 0 = 1,

1 - 1 = 1.

Правило 0 - 1 = 1 применяется в текущем разряде вместе с правилом заема еди- ницы в старшем, соседнем разряде уменьшаемого, которая в данном разряде воз-

вращается уже двумя единицами (двоичное 10). Вычитание из них 1 дает 1.

В следующем примере вычитания можно увидеть, как занятая в отдаленном

старшем разряде единица последовательно распределяется по младшим разрядам уменьшаемого:

10000 - 10

1110.

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

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

2.1.4 Деление

Деление в двоичной системе счисления также выполняется в полной аналогии с десятичной арифметикой. Рассмотрим пример:

1011011 ë 111

-111 1101. 1000 -111

111 -111 0

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

19

2.2 Машинные коды целых чисел

Принципиальным ограничением при реализации арифметических операций ап- паратными средствами ЭВМ является конечное число разрядов, предусматриваемых для записи чисел. Для хранения и обработки процессором ЭВМ двоичных чисел применяются электронные устройства, называемые регистрами. Двоичные цифры (разряды) числа хранятся в отдельных триггерах, входящих в состав регистра.

Совокупность разрядов, в которой записывается двоичное число, называют раз- рядной сеткой, а количество этих разрядов длиной разрядной сетки, которую бу-

дем обозначать буквой b. Типичная длина разрядной сетки, которая поддерживается процессорами современных компьютеров, составляет 4 (тетрада), 8 (байт), 16 (слово), 32 (двойное слово) и 64 (четверное слово) двоичных разряда.

Из того, что длина разрядной сетки числа ограничена, сразу следует конечность множества чисел, которые можно в ней записать. Проблема ограниченности множе- ства представимых чисел рационально решается путем использования двух специ- альных форматов записи чисел, называемых форматом с фиксированной запятой (или с фиксированной точкой) и форматом с плавающей запятой (или с плавающей точкой). Эти форматы (см. п. 2.2.5 и 2.2.6) позволяют практически без увеличения

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

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

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

к вычитанию (см. п. 2.1.2 и 2.1.4).

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

2.2.1 Прямой код

Прямой код используется для представления чисел в запоминающем устройстве ЭВМ, а также при умножении и делении.

В прямом коде запись b-разрядного числа состоит из одного знакового разряда и (b-1) разрядов цифровой части. В качестве знакового разряда используется старший разряд, в нем знак плюс кодируется нулем, а знак минус единицей. Например, в четырехразрядной сетке число 1 записывается в виде 0001, а число (–1)в виде 1001. Как видим, прямой код представляет собой «естественный», простой способ кодирования положительных и отрицательных чисел.

Число разных кодовых наборов, которые могут быть записаны в b-разрядной сетке, равно 2b и включает все наборы от 00…0 до 11…1 длины b.

Наибольшее представимое в прямом коде число это положительное число 2b-1–1, наименьшее это [–(2b-1–1)] (проверьте!). Числу 0 соответствуют два разных b-разрядных представления: 00…0 (соответствует записи «+0»), и 10…0 (соответ-

20