
- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
Преобразование в десятичную систему счисления из других систем счисления можно производить по формуле (2-01), выполняя вычисления в десятичной системе счисления. Такие преобразования мы выполняли неоднократно в предыдущих разделах, вычисляя количественные эквиваленты кодов чисел.
Преобразовать десятичное целое в двоичное, восьмеричное или шестнадцатеричное целое можно последовательным делением исходного числа на основание системы счисления, в которую выполняют преобразование, с выделением остатков. Вычисления выполняют в десятичной системе счисления до получения целого частного. Результат последнего деления и цепочка предшествующих остатков образуют код искомого результата.
Пример 2-1. Преобразуем десятичное целое 36 519 в системы счисления с основаниями 16, 8 и 2.
Из примера видно, что при преобразовании десятичного числа в двоичное удобнее вначале выполнить его преобразование в шестнадцатеричное или в восьмеричное число, а затем заменить двоичным эквивалентом.
Преобразование правильной десятичной дроби в двоичную, восьмеричную или шестнадцатеричную дробь можно выполнять последовательным умножением исходной десятичной дроби на основание системы счисления, в которую выполняют преобразование, с выделением целой части произведений. Вычисления выполняют в десятичной системе счисления. Цепочка значений целых частей произведений образует искомый результат. В общем случае результат может содержать бесконечное количество разрядов. Поэтому вычисления выполняют до получения требуемого числа разрядов с учетом последующего округления.
Пример 2-2. Преобразуем десятичную дробь 0.83 в системы счисления с основаниями 2, 8 и 16.
0.83 2 = 1.66 0.83 8 = 6.64 0.83 16 = 13.28 13 = D
0.66 2 = 1.32 0.64 8 = 5.12 0.28 16 = 4.48
0.32 2 = 0.64 0.12 8 = 0.96 0.48 16 = 7.68
0.64 2 = 1.28 0.96 8 = 7.68
0.28 2 = 0.56 Результаты: 0.1101012
0.56 2 = 1.12 0.65078 = 0.110 101 000 1112;
0.D4716 = 0.1101 0100 01112.
Заметим, что
преобразование десятичной дроби в
системы с основанием 2n,
равно как и дроби в системе основанием
в десятичную дробь можно выполнить в
общем случае только приближенно. Правила
округления чисел рассмотрены в разделе
3.3.2.
Преобразование
смешанного
десятичного числа в
смешанное число в системе с основанием
выполняют в два приема. Раздельно
преобразовывают целые и дробные части
числа. Полученные результаты приписывают
один к другому. Так, например, результат
преобразования десятичного числа
36519.83 в шестнадцатеричную систему
счисления будет 8EA7.D47 (см. примеры 2-1 и
2-2).
Представление чисел в форматах с фиксированной точкой
Формат с фиксированной точкой
В ЭВМ информация
(и в том числе числа) хранится в ячейках
запоминающего устройства в двоичных
кодах. Двоичным
кодом называют
вектор с конечным числом координат,
каждая координата которого принимает
значение из множества
.
Например, (011001) – шести координатный
двоичный вектор или двоичный код, который
кодирует (обозначает) некоторую информацию
не обязательно число. Чтобы, получив
код, прочесть закодированную им
информацию, нужно знать правило ее
декодирования.
Координату двоичного кода называют битом, так как она содержит один бит информации. Количество бит в коде называют длиной двоичного кода. Длина кода 011001 равна 6 бит.
Любой двоичный код независимо от закодированной им информации имеет количественный эквивалент. Количественным эквивалентом двоичного кода называют количественный эквивалент двоичного целого числа без знака, совпадающего с кодом. Так количественный эквивалент двоичного кода 011001 кодирующего, быть может, слово СЛОН, равен количественному эквиваленту двоичного целого 11001 и имеет значение 2510.
Информацию (и в том числе числа) принято представлять строками символов подобными тем, которые Вы сейчас читаете. Для упрощения хранения, поиска и кодирования информации строку символов представляют в определенном формате.
Форматом называют поле, состоящее из элементарных позиций. Позиция поля предназначена для записи одного символа из множества символов строки. Примером формата является окошко счетчика электроэнергии потребляемой Вашей квартирой.
Каждая позиция формата имеет индекс (порядковый номер). Индексацию позиций можно выполнять в любом однажды выбранном порядке. В этой книге индексацию позиций принято выполнять слева направо, начиная с 0, как это показано на рис.3-1.
Формат характеризуют
длинной формата
равной количеству в нем позиций и
мощностью множества применяемых
символов. Длина формата рис.3-1
.
Р
азличают
форматы с переменной и фиксированной
длиной.
Формат с фиксированной длиной состоит из фиксированного числа позиций (как в электросчетчике) и его длина не зависит от количества символов в записываемой строке символов. Разумеется, что в таком формате можно записать строку с числом символов ограниченным длиной формата . Короткие строки можно дополнить символами пробела. Для записи длинных строк используют цепочку, составленную из форматов фиксированной длины.
Формат переменной длины содержит количество позиций равное количеству символов в записываемой в него строке. Формат переменной длины для записи чисел используют редко. Это объясняется существенным осложнением хранения, записи и чтения чисел в памяти ЭВМ и рядом иных причин. В этой книге особенности арифметики в формате переменной длины не рассматриваются.
Запись числа в позиционной системе счисления является строкой символов из множества, включающего в общем случае символы знака числа, цифры и символ разделителя – запятую или точку. Для записи таких чисел в формат фиксированной длины последний разбивают на три поля фиксированной длины: знака числа, целой части числа и дробной части числа как это показано на примере рис.3-2.
П
оле
знака содержит всегда одну позицию, в
которую записывают знак. Длины полей
целой и дробной частей выбирают исходя
из заданного диапазона представления
чисел и точности. Так как длины полей
фиксированы, разделительную запятую
или точку с целью экономии позиций в
формат не записывают. Их положение
задают неявно, – на границе полей целой
и дробной части.
Если формат рис.3-2 предназначен для записи десятичных чисел, то диапазон представляемых в нем чисел будет от +999,9999 до -999,9999, причем число ноль можно записать в формат двумя способами как +000,0000 или как –000,0000. Число –12,3 будет записано в формат как –012,3000, а точнее как –0123000, так как положение запятой задано не явно и фиксировано между позициями 3 и 4. Отсюда происходят названия формата формат с фиксированной запятой или формат с фиксированной точкой.
Если формат предназначают для записи целых чисел со знаком, то его разбивают на два поля рис.3-3а. В этом формате положение запятой фиксировано на границе формата справа. Если формат предназначают для записи правильных дробей со знаком, то его также разбивают на два поля рис.3-3б. Причем с целью экономии позиций 0 целых в формат не пишут и запятую фиксируют между позициями 0 и 1. Так, например правильная десятичная дробь +0,205 будет записана в формате рис.3-3б как +2050000.
Чтобы интерпретировать правильно содержимое формата, необходимо знать положение запятой в формате. Не зная положения запятой можно содержимое формата +2050000 ошибочно интерпретировать, например как +20,5, хотя оно в действительности имеет значение +0,205.
Е
сли
формат предназначен для записи чисел
без знака, то в нем поле знака отсутствует.
Для кодирования
строк символов двоичными кодами каждому
символу из множества символов применяемых
при записи строк приводят в соответствие
двоичный код. Количество используемых
для этого кодов символов обычно равно
мощности множества символов. Длина
кодов равна ближайшему большему целому
к двоичному логарифму их количества.
Например, для кодирования 230 символов
используют 230 двоичных кодов длиной
бит 4.
В формате каждый символ, находящийся в
позиции его поля, заменяют его двоичным
кодом. В результате образуется двоичный
код, записанный в формат, состоящий из
бит.
Чтобы сократить суммарную длину кода строки представляющей число, знак числа (+) кодируют кодом 0, а знак (–) – кодом 1. Так как (,) в формат не пишут, то ей не приводят в соответствие какой либо код. Двоичным цифрам 0 и 1 приводят в соответствие однобитовые коды 0 и 1. В табл.2.2 и табл.2.3 приведены варианты кодирования шестнадцатеричных, восьмеричных и десятичных цифр.
Код, полученный по изложенным правилам, называют прямым кодом числа.
Запись числа -12,310 в двоично-десятичном коде 8421 в формате рис.3-2 в прямом коде будет иметь вид
1 0000 0001 0010 0011 0000 0000 0000
– 0 1 2 , 3 0 0 0
Здесь пробелы отмечают границы позиций формата. Положение запятой определено количеством позиций в поле целого.
Запись целого числа +6702018 в формате рис.3-3а в прямом коде
0 000 110 111 000 010 000 001
+ 0 6 7 0 2 0 1
Запись правильной дроби –0,0111012 в формате рис.3-3б в прямом коде
1 0 1 1 1 0 1 0
– ,0 1 1 1 0 1 0
Если каждая позиция в форматах рис.3-2 и рис.3-3 предназначена для записи одного двоичного бита, то форматы называют двоичными форматами с фиксированной точкой и позицию формата называют битом, так как она содержит один бит информации. Длину двоичного формата и его полей измеряют количеством представляемых в них бит.
Не следует путать запись числа с его кодом. Код числа и запись числа могут существенно отличаться, тем более что для кодирования чисел могут использоваться иные, не рассмотренные выше, способы кодирования.
В специализированных ЭВМ формат с фиксированной точкой применяют как для хранения целых, так и для хранения действительных чисел в виде правильных дробей и смешанных чисел. Выбор длины формата и его полей выполняет разработчик по своему усмотрению. В современных универсальных ЭВМ формат с фиксированной точкой применяют для хранения кодов целых чисел. Действительные числа представляют в форматах с плавающей точкой.
Для обеспечения совместимости (совместимость – свойство различных по конструкции устройств выполнять идентичные функции) производители универсальных ЭВМ используют для хранения двоичных целых чисел следующие стандартные форматы фиксированной длины рис.3-4: полуслово, слово и слово двойной длины. В табл.3.1 приведены значения параметра формата и предельные значения целых чисел представляемых в формате.
Длина полуслова 2 байта (восьмерку бит называют байтом), слова – 4 байта, слова двойной длины – 8 байт.
215–1 = 32 767
231–1 = 2 147 483 647
263–1 = 9 223 372 036 854 775 807