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

Программные преобразования числовой информации (96

..pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
342 Кб
Скачать

Московский государственный технический университет имени Н.Э. Баумана

А.Ф. Деон, С.С. Комалов, Ю.И. Терентьев

Программные преобразования числовой информации

Рекомендовано редсоветом МГТУ им. Н.Э. Баумана в качестве учебного пособия

Под редакцией Б.Г. Трусова

Москва Издательство МГТУ им. Н.Э. Баумана

2006

УДК 681.142.2 (075.8) ББК 32.973

Д11

Рецензенты: Н.В. Абакумова, В.В. Чистов

Деон А.Ф., Комалов С.С., Терентьев Ю.И.

Д11 Программные преобразования числовой информации: Учеб. пособие / Под ред. Б.Г. Трусова. – М.: Изд-во МГТУ им. Н.Э. Бау-

мана, 2006. – 36 с. ISBN 5-7038-2875-9

Рассмотрены вопросы представления числовой информации в позиционных системах счисления. На основе битовой логики описаны алгоритмы преобразования целых и вещественных чисел, на конкретных примерах приведена их программная реализация.

Для студентов 1-го курса МГТУ им. Н.Э. Баумана. Ил. 7. Библиогр. 2 назв.

УДК 681.142.2 (075.8) ББК 32.973

Учебное издание

Алексей Федорович Деон Сергей Сергеевич Комалов Юрий Иванович Терентьев

Программные преобразования числовой информации

Редактор А.В. Сахарова Корректор Л.И. Малютина

Компьютерная верстка Е.В. Зимакова

Подписано в печать 30.06.2006. Формат 60х84/16. Бумага офсетная.

Печ. л. 2,25. Усл. печ. л. 2,09. Уч.-изд. л. 1,95. Тираж 100 экз.

Изд № 45. Заказ

Издательство МГТУ им. Н.Э. Баумана. 105005, Москва, 2-я Бауманская, 5.

ISBN 5-7038-2875-9

© МГТУ им. Н.Э. Баумана, 2006

ВВЕДЕНИЕ

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

Используемые в пособии программы написаны на языке Pascal для консольного режима среды Delphi.

1. ПОЗИЦИОННЫЕ СИСТЕМЫ СЧИСЛЕНИЯ

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

Количество различных цифр s, употребляемых в позиционной системе, называется ее основанием. Эти цифры обозначают s целых чисел: обычно 0, 1, ... , (s – 1). В десятичной системе используются десять цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Следовательно, эта система имеет основанием число 10.

В общем случае любое число X в позиционной системе может быть представлено в виде полинома от основания s:

n

 

X(s) = xi si = xn sn + xn1sn1 ++ x1s1 +

(1)

i=−m

+ x0 s0 + x1s1 ++ xm sm .

3

Здесь в качестве коэффициентов xi могут стоять любые из s цифр, используемых в системе счисления. Они показывают, сколько единиц i-го разряда содержится в числе (n и m – номера старшего и младшего разрядов).

Краткая запись числа представляет собой последовательность соответствующих цифр:

X(s) = xn xn–1 … x1 x0, x–1 xm .

(2)

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

Например, в десятичной системе счисления число 497,108 можно представить следующим образом:

497,108 = 4 102 + 9 102 + 7 101 +1 101 + 0 102 + 8103.

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

10101101,1012 = 1 27 + 0 26 +1 25 + 0 24 +1 23 + + 1 22 + 0 21 +1 20 +1 21 + 0 22 + 1 23.

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

В восьмеричной системе употребляют восемь цифр: 0, 1, 2, 3, 4, 5, 6, 7. Любое число в восьмеричной системе представляется последовательностью цифр (2), в которой числа xi могут принимать

4

значения от 0 до 7. Этой записи соответствует разложение числа X по степеням числа 8.

В шестнадцатеричной системе для изображения чисел употребляют 16 цифр – от 0 до 15. Чтобы одну цифру не изображать двумя символами, приходится вводить специальные обозначения для цифр, бóльших девяти. Обозначим первые десять цифр этой системы цифрами от 0 до 9, а старшие шесть цифр – латинскими буквами: десять – А, одиннадцать – В, двенадцать – С, тринадцать – D, четырнадцать – Е, пятнадцать – F.

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

Числовые данные, необходимые для решения задач, обычно вводят в машину в десятичной системе.

2. ПЕРЕВОД ЧИСЕЛ В ПОЗИЦИОННЫХ СИСТЕМАХ СЧИСЛЕНИЯ

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

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

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

5

Перевод правильной дроби. Алгоритм заключается в последовательном умножении этой дроби на новое основание r(s) (по правилам исходной системы), причем умножают только дробные части. Дробь X(r) в новой системе счисления будет представлена последовательностью целых частей произведений в порядке их получения, т. е. в старшем разряде будет представлена целая часть первого произведения. Операции умножения заканчиваются при заполнении всех отведенных для двоичного числа разрядов (или, когда дробная часть произведения становится равной нулю).

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

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

В этом случае исходное число изображают в виде полинома

(1). При этом исходное основание и все цифры представляют в новой системе. Подобный подход применяют при переводе чисел в десятичную систему счисления.

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

Если для оснований систем счисления s и r справедливо соотношение s = rk, где k – целое положительное число, то такие системы называются системами счисления с кратными основаниями.

Системами с кратными по отношению друг к другу основа-

ниями являются двоичная, восьмеричная и шестнадцатеричная системы (23 = 8; 24 = 16).

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

Случай, когда основание исходной системы счисления выше

основания новой системы s > r, например перевод X(8) X(2) ; X(16) X(2) . Каждый символ числа X(s) заменяют его k-разрядным

представлением в r-системе.

Приведем примеры перевода чисел. Пусть s = 8; r = 2; k = 3. Исходное число: X(8) = 63,425. Эквивалентное число X(2) =

= 110 011, 100 010 101. Каждый восьмеричный символ заменен двоичной триадой.

Пусть s = 16; r = 2; k = 4.

6

Исходное число X(16) = 8A9, 5F. Эквивалентное число X(2) = = 1000 1010 1001, 0101 1111.

Случай, когда основание исходной системы ниже основания

новой системы, например X(2) X(8) ; X(2) X(16) .

Число в исходной s-системе разбивают на группы по k разрядов (вправо и влево от запятой); неполные группы добавляются нулями (справа – для дробной части; слева – для целой части). Каждую группу из k символов системы счисления с основанием s заменяют одним эквивалентным ей символом системы с основанием r.

Пусть X(2) X(16) . Тогда исходное число X(2) = 1001110011,

11110011.

Исходное число с разбивкой и с добавлением нулей имеет вид

X(2) = 0010 0111 0011, 1111 0011. Эквивалентное число X(16) = = 273, F3.

3. ФОРМЫ ПРЕДСТАВЛЕНИЯ ЧИСЕЛ

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

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

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

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

7

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

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

Представление числа с плавающей запятой определяется выражением X(s) = Ms p , где M – мантисса числа; s p – характеристи-

ка числа; p – порядок числа. Мантисса и порядок заданы в системе счисления с основанием s. Знак числа совпадает со знаком мантиссы.

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

s1 M < 1. Код нормализованной мантиссы в двоичной системе счисления можно представить как M = Z1X–2 X–3 Xm, где Z – код знака мантиссы.

4.ОПЕРАЦИИ ПРЕОБРАЗОВАНИЯ ДВОИЧНЫХ КОДОВ

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

Отрицательные числа могут быть представлены еще в двух кодах: обратном и дополнительном.

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

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

8

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

Приведем примеры получения машинных кодов для положи-

тельного и отрицательного числа.

X = + 0,1110010.

 

[X]пр =

Пусть положительное число

Тогда

= 0 111 0010, [X]обр = 0 111 0010, [X]доп = 0 111 0010.

 

 

Пусть отрицательное число

X = – 0,1110010.

Тогда

[X]пр =

=1 111 0010, [X]обр = 1 000 1101, [X]доп = 1 000 1110.

Использование дополнительного или обратного кода позволяет

операцию вычитания свести к операции алгебраического суммирования: А – В = А + (–В).

Получить прямой код из обратного или дополнительного можно по тем же правилам:

[X]пр = [[X]доп]доп, [X]пр = [[X]обр]обр.

Для представления целых чисел, задающих порядки чисел с плавающей запятой, применяют так называемый смещенный код с отрицательным нулем [1]:

Xсм = A – 1 + X,

где A – смещение, равное весу старшего разряда, A = 2n; n – номер старшего разряда.

Диапазон представляемых чисел в этом случае следующий: для положительных чисел 0 ≤ X A , а для отрицательных

0 | X |A 1.

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

К первым относятся операции пересылок операндов с выходов одних устройств на входы других устройств и операции хранения операндов в памяти компьютера.

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

Рассмотрим поразрядные операции над кодами.

Поразрядные операции – операции, которые выполняются над одноименными разрядами операндов независимо от соседних разрядов.

9

Поразрядное инвертирование – операция, при которой каждый разряд xi некоторого кода превращается в xi = 1xi . Операция ис-

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

ции суммирования в соответствии с правилом

0 0 =0, 0 1 =1, 1 0 =1, 1 1 = 0,

При последней операции 1 переносится в старший разряд. Поразрядное сложение используется, например, при сравнении

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

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

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

При арифметическом сдвиге влево на одну позицию числа в прямом коде [X]пр = 10011011 получим число 10110110, а при сдвиге вправо на два разряда – 10000110.

Для отрицательных чисел в обратном коде освобождающиеся разряды (старший и младшие) заполняются единицами. Например, если число, представленное обратным кодом, имеет вид [X]обр = 11100100, то после сдвига на два разряда влево получим 10010011, а при сдвиге на один разряд вправо – 11110010.

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

Пусть [X]доп = 11100101. После сдвига влево на два разряда получим 10010100, а после сдвига вправо на один разряд – 11110010.

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

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]