Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на Эвм.rtf
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
88.2 Кб
Скачать

9) Нормализованное число

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

Пусть слово состоит из 2 байт, два слова – это 4 байта или 32 бита.

Нормализированное число одинарной точности, представленное в формате с плавающей точкой, записывается в память следующим образом: знак числа – в бите 15 первого слова (0 – для положительных и 1 – для отрицательных чисел); порядок размещается в битах 7-14 первого слова, а мантисса занимает остальные 23 бита в двух словах (с 0 по 6 бит первого слова и все биты второго слова). Нормализированное число двойной точности записывается в четыре слова памяти и отличается от представления чисел с одинарной точностью только тем, что продолжение мантиссы размещается в следующих за первым словом трех последовательных словах памяти, а всего под мантиссу в этом случае отводится 55 бит.

10)Представление чисел с плавающей точкой

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

X = <знак>M*pt,

где М – мантисса числа Х, t – порядок, p – основание ( обычно целая степень числа 2). Мантисса и порядок представляются в системе счисления с основанием p. Знак числа совпадает со знаком мантиссы.

Порядок t может быть положительным или отрицательным целым числом, определяет положение точки в числе Х.

Для представления порядка применяют смещенный код.

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

Особенностью смещенного кода является то , что из [X1]см > [X2]см Þ X1 >X2.

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

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

11)Перевод целых, дробных и смешанных чисел из десятичной системы счисления в другие и обратно

перевод и систем счисления в в десятичную систему счисления

Для перевода необходимо вычислить полином X=anPn+an-1Pn-1+...+a1P1+a0P0+a-1P-1+a-2P-2+...+a-mP-m, где цифры ai заменяются их десятичными изображениями и операции выполняются в 10-й системе счисления.

перевод чиссел из десятичной системы с счисления в другие системы

Для определения b0 разделим левую и правую части равенства на Q, причем в левой части деление выполняется по правилам 10-чной арифметики. Имеем: X/Q=bsQs-1+bs-1Qs-2+...+b1+b0 /Q. Представим левую часть равенства как сумму целой и дробной частей X/Q=[X/Q]+{X/Q}и приравняем их с целой и дробной частями правой части равенства: [X/Q]=bsQs-1+bs-1Qs-2+...+ b1 и {X/Q}=b0/Q. Таким образом, цифра b0 является остатком от деления X на Q (деление выполняется в 10-чной системе счисления).

Далее положим X1=X/Q=bsQs-1+bs-1Qs-2+...+ b1 и повторим аналогичные действия для определения цифры b1. Цифра b1 является остатком от деления X1 на Q (деление выполняется в 10-чной системе счисления).

Таким образом, перевод числа X осуществляется по следующим рекуррентным формулам:

bi=Q{Xi/Q}, т.е. цифра bi есть остаток от деления Xi на Q;

Xi+1=[Xi/Q], т.е. целая часть от деления Xi на Q (i=0, 1, 2, …; X0=X); процесс продолжается до тех пор, пока не будет получено Xi+1=0.

Словесная формулировка: Для перевода целого 10-чного числа X в систему счисления с основанием Q необходимо X разделить нацело на Q, записанное в 10-чной системе счисления. Затем полученное неполное частное нужно снова разделить нацело на Q. Процесс продолжать до тех пор, пока последнее полученное неполное частное не станет равным нулю. Представлением числа X будет последовательность остатков деления, изображенных одной Q-чной цифрой и записанных в порядке, обратном порядку их получения.

12) Арифметические операции над целыми знаковыми и беззнаковыми числами, представленными в машинных кодах

Выполнение операции сложения и вычитания над числами в дополнительном коде. Правило определения ситуации переполнения.

Обратный код числа получается инверсией двоичных разрядов. Через а обозначим двоичный разряд числа, а через а* - инверсию двоичного разряда (если а=1, то а*=0 и если а=0, то а*=1). Правило получения обратного кода:

если N>0, то = 0aaaaaaa;

если N<0, то =1 а* а* а* а* а* а* а* а*,

если N=0, то имеет место неоднозначность или .

Например, число 11 в обратном коде представляется как 0.1011, а число с=-7 будет представлено как 1.1000. Сложим эти числа:

0.1011+1.1000= 0.0011+ единица переноса из старшего разряда.

Если единицу пересоса из старшего разряда игнорировать, то результат сложения неверный: 11-7=3. Чтобы получить верный результат, необходимо единицу переноса добавить к младшему разряду результата: 0.1011+1.1000=0.0011+0.0001=0.0100 (11-7=4).

Следовательно,

- представление 0 в обратном коде неоднозначно;

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

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

где - значения знаковых разрядов слагаемых x и y и результата z.

Для устранения этого недостатка в ЭВМ часто используют модифицированные коды: для изображения знака числа используются 2 двоичных разряда, при этом знак "+" изображается комбинацией 00, а знак "-" -комбинацией 11. Тогда ситуация переполнения определяется при разных значениях битовых разрядов знака, а именно, если в знаковых разрядах получаются комбинации 01 или 10 - значит, произошло переполнение.

Например, сложим –120 и –34 и –13 и +98:

11.0001000 11.1110011

+11.1011101 +00.1100010

1 10.1100110 (переполнение) 1 00.1010101 (нет переполнения)Алгоритм выполнения умножения двоичных чисел. *

- вводится дополнительный младший разряд множителя . Остальные разряды множителя обозначим через ( для дополнительного разряда такое обозначение будет справедливо при условии i=0);

- в процессе умножения анализируются 2 рядом расположенных разряда;

- если -=0, то производится сдвиг частичного произведения ;

- если -=1, то к прибавляется , частичное произведение сдвигается вправо на разряд;

- если -=-, то из вычитается (или иначе добавляется - со сменой знака), частичное произведение сдвигается вправо на разряд;

- после умножения на знаковый разряд сдвиг не производится;

- алгоритм может быть записан следующим рекуррентным соотношением:

Прежде чем рассматривать этот алгоритм на конкретных примерах приведу правило арифметического сдвига двоичного кода вправо, что, по сути, соответствует делению числа на 2 или умножению на . Лучше всего это правило иллюстрирует следующий рисунок:

Жирные стрелки показывают, что в значащей части двоичного значения дублируется знаковый разряд.

Проиллюстрируем изложенный алгоритм на примере умножения числа –25 (1.00111*25) на 10 (0.1010*24). Прежде всего, зафиксируем те значения, которые будут фигурировать в вычислениях: множимое 1.00111, дополнительный код множимого 0.11001, дополнительный правый разряд множителя , остальные разряды

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

1) -= следовательно, (далее ) сдвигаем начальную частичную сумму 0.00000 вправо =0.000000;

2) добавляем к предыдущей частичной сумме множимое с обратным знаком, 0.000000+0.11001=0.110010, сдвигаем новую частичную сумму вправо 0.0110010;

3) добавляем к предыдущей частичной сумме множимое 0.0110010+1.00111=1.1001110, снова сдвигаем частичную сумму вправо ;

4) добавляем к предыдущей частичной сумме множимое с обратным знаком, 1.11001110+0.11001=(1)0.10010110 (в скобках отражен отбрасываемый разряд за пределами разрядной сетки) и снова сдвигаем результат вправо 0.010010110;

5) добавляем к предыдущей частичной сумме множимое 0.010010110+1.00111=1.100000110.

Получили число отрицательное (правильно!) в дополнительном коде. Получим для него положительный эквивалент 0.011111010 и учтем масштабный множитель *=. Получим целое двоичное число 111111010, переведя которое в десятичную систему счисления, получим 250.Алгоритм деления двоичных чисел.

Операция деления в ЭВМ, так же, как и операция умножения производится над числами с фиксированной запятой перед старшим разрядом.

При делении делимого Х на делитель Y получаются частное Z и остаток О, который может оказаться равным 0 или некоторому числу в зависимости от значений Х и Y и числа шагов деления. Различают алгоритмы деления со сдвигом остатка и со сдвигом делителя. При делении n-разрядных чисел по любому из этих способов на первом шаге выполняют пробное вычитание (сложение в дополнительном коде делимого с положительным знаком и делителя с отрицательным знаком). Определяется первый остаток:

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

Очередная цифра частного определяется по правилу:

Частное в конце деления получается в прямом коде. Знак частного определяется по правилу , где означает логическую операцию “исключающее или” или иначе “сложение по модулю 2”. Напомню, что результат такой операции, равный 1, получается при условии, что и имеют разные значения (один 0, другой 1).

13) Арифметические операции над числами с плавающей точкой, представленными в машинных кодах Умножение:

X = 2mx * sign X.x1x2...xn

Y = 2my * sign Y.y1y2...yn

Z = X*Y = 2mx+my * sign Z.z1z2...zn

Порядок выполнения операции следующий:

Знак произведения находится так же, как и при умножении чисел с фиксированной запятой:

Порядок произведения находится алгебраическим суммированием порядков мно­жимого и множителя.

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

При этом возможны следующие случаи:

Мантисса произведения – ненормализованное число, так как

Поэтому необходима нормализация влево максимум только на один разряд.

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

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

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

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