Скачиваний:
392
Добавлен:
29.04.2018
Размер:
2.29 Mб
Скачать

21. Арифметические сдвиги отрицательных двоичных чисел, представленных в прямом коде.

Арифметические сдвиги влево и вправо реализуются по-разному в зависимости как от знака числа, так и от используемого кода (прямого обратного, дополнительного).

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

Реализация этого типа сдвига иллюстрируется следующими примерами.

Пример 1

Выполнить арифметический сдвиг влево двоичного числа А = 11. 001010 (соответствует 1010), представленного в модифицированном прямом коде.

Решение

Заданный сдвиг, имеющий своей целью получение результата, в два раза превышающего по абсолютному значению значение исходного кода, дает в результате 11.010100 (2010), которое получается за счет логического сдвига влево только модульной части исходного кода.

Факт получения переполнения устанавливается по наличию единичного значения старшего разряда в сдвигаемом коде перед очередным сдвигом.

Пример 2

Выполнить арифметический сдвиг вправо двоичного числа А = 11.01110 (1410), представленного в модифицированном прямом коде.

Решение

Заданный сдвиг, имеющий своей целью получение кода, в два раза меньшего по абсолютному значению по отношению к значению исходного кода, дает в результате число 11.00111 (710), которое получается за счет логического сдвига вправо только модульной части исходного кода.

22. Арифметические сдвиги двоичных чисел, представленных в обратном коде.

При арифметическом сдвиге влево отрицательного двоичного числа, представленного в обратном коде, осуществляется циклический сдвиг исходного кода с контролем за переполнением, например, сдвиг влево отрицательного двоичного числа 11.1100110 (2510), представленного в обратном коде, дает в результате 11.1001101 (5010).

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

Пример3

Выполнить сдвиг вправо на четыре разряда двоичного числа 11.1001101 (десятичный эквивалент – 5010), представленного в обратном коде.

Первый сдвиг дает 11.11001101 (5010) à 11.11100110 (2510).

Второй сдвиг дает 11.11100110 (2510) à 11.11110011 (1210).

Третий сдвиг дает 11.11110011 (1210) à 11.11111001 (610).

Четвертый сдвиг дает 11.11111001 (610) à 11.11111100 (310).

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

После выполнения последнего, четвертого сдвига выполняется округление, при котором, если последний «вытолкнутый» разряд имел значение 0, к результату последнего сдвига прибавляется – 1.

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

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