Решение: Преобразуем заданные числа в двоичную систему счисления: А=549310 ,= 10101011101012, В = - 191110 = -111011101112. Определим количество разрядов для модульной части записи чисел, учитывая не только значения используемых операндов, но и ожидаемые результаты выполнения заданных операций. Исходя из абсолютного значения операндов разрядность представления модульной части n должна быть равна 13. Учитывая то, что в подлежащих реализации выражениях над числами выполняется только одна операция (или сложения, или вычитания), длину модульной части необходимо взять на один разряд больше, т.е. n = 14. Избавляясь от операции вычитания, приводим заданные выражения к виду С1= А+В, С2=А+(-В), С3= В+(-А), С4=(-А) +(-В). Таким образом, в подлежащих реализации выражениях в качестве операндов присутствуют следующие величины: A , -A, B, -B. Представим их в прямом и дополнительном коде [А]пр = 0. 01010101110101, [А]дк = 0. 01010101110101, [-А] пр = 1. 01010101110101, [-А] дк = 1. 10101010001011, [В] пр = 1. 00011101110111, [В] дк = 1. 11100010001001, [-В] пр = 0. 00011101110111, [-В] дк = 0. 00011101110111.
[-А] пр = 1. 01010101110101. Найдем запись заданного числа в дополнительном коде: [-А] д : для определения модульной части прибавим к невключенной границе диапазона ( 2n = 214 = 100000000000000) число В: 100000000000000 +(-1010101110101) = 10101010001011 и тогда [-А] д = 1. 10101010001011.
[В] пр = 1. 00011101110111. Найдем запись заданного числа в дополнительном коде: [В] д : для определения модульной части прибавим к невключенной границе диапазона ( 2n = 214 = 100000000000000) число В: 100000000000000 +(-11101110111) = 11100010001001 и тогда [В] д = 1. 11100010001001.
Используя сформированный дополнительный код, реализуем выражения для С1,С2, С3, С4. С1: 0. 01010101110101 - [A] дк + 1. 11100010001001 - [B] дк 10.00110111111110 - [C1] дк=[C1] ПК При выполнении сложения в данном случае возникла единичка переполнения знакового поля. При работе с дополнительным кодом она игнорируется (она перечеркнута). С2: 0. 01010101110101 - [A] дк + 0. 00011101110111 - [-B] дк 0.01110011101100 - [C2] дк =[C2] пк
С4: 1. 10101010001011 - [-A] дк + 0. 00011101110111 - [-B] дк 1.11001000000010 - [C4] дк 1.00110111111110 - [C4] ПК В данном случае также возникло переполнение знакового поля, которое игнорируется.
2.
Решение:
Задание 1.2 А В порядок мантисса порядок мантисса з аз з аз з аз з аз код опер - 2 - 0.56 0 + 0.51 о - Найдём разность С1 чисел А и В, представленных с плавающей точкой, если А и В представлены в виде порядков, соответственно [ап] и [вп] и мантисс, соответственно [а м] и [в м], где [а п] = -0102, [а м] =-0.1000112, [в п] = 0002, [в м] = 0.1000002. Представим порядки и мантиссы в прямом коде: [а п]пр = 1.010, [а м]пр =1.100011, [в п]пр = 0.000, [в м]пр = 0.100000.
При выполнении операции необходимо использовать обратный код. [а п]о: модульная часть: (23-1) + (-010) = 101, тогда [а п]о= 1.101 [в п]о = 0.000. Избавляясь от операции вычитания, приводим заданное выражение к виду С1= А+(-В). [-в п]о: модульная часть: (23-1) + (-000) = 111, тогда [-в п]о= 1.111. Выравнивание порядков: из порядка первого числа вычитаем порядок второго числа: 1.101 [а п]о 1.111 [-в п]о 1.100 – разность порядков в обратном коде, 1.010 - разность порядков в прямом коде. Так как знак разности порядков отрицательный, то в качестве общего порядка, а следовательно, и предварительного значения порядка искомого результата С1п`, берется порядок второго числа (вп). Для того чтобы взять в качестве порядка первого числа порядок второго числа, т.е. увеличив его порядок на 2, необходимо мантиссу этого меньшего числа умножить на 2-2, т.е. выполнить её арифметический сдвиг на два разряда вправо. Таким образом, будем иметь после выравнивания следующую форму представления операндов: [а м`] пр = 1.001000, [в м`] пр = 0.100000. После выравнивания порядков можно определить предварительное значение мантиссы С1` как С1`=[а м`] пр - [в м`]пр. [а м`]о: модульная часть: (26-1) + (-001000) = 110111, тогда [а м`]о= 1.110111 Избавляясь от операции вычитания, приводим выражение С1`=[а м`] пр - [в м`]пр к виду С1`=[а м`] пр + [-в м`]пр. [-в м`]о: модульная часть: (26-1) + (-100000) = 011111, тогда [-в м`]о = 1. 011111.
11.110111 -[а м`] о + 1 1.011111 -[-в м`]о 111.010110 - [С1`]о. 10.101000 - [С1`]пр,. Из записи [С1`]дк, полученной после вычитания мантисс операндов с выровненными порядками, видно, что нормализация представления результата нарушена. Поэтому для данного примера необходимо выполнить этап устранения нарушения нормализации. В данном случае нарушение нормализации слева от точки, так как получено [С1`]пк с ненулевой целой частью. Для того чтобы привести полученную предварительную мантиссу к нормализованной форме, достаточно её разделить на 2, то есть выполнить её арифметический сдвиг вправо. В результате будем иметь окончательное значение мантиссы: С1 = С1` *2-1=10.101000*2-1= 11.110100. Деление мантиссы С1` на 2 сопровождается изменением ранее найденного предварительного значения порядка результата С1п` на +1. 00.000 [с1 п] пр ` + 00.001 +1 00.001 [с1 п] пр После устранения нарушения нормализации окончательный результат будет иметь вид С1{ [c1 п ] пр =00.001, [c1 м ] пр = 11.110100}.