Лекции по ВМСС. Конспект лекций по курсу "Электронные вычислительные машины, системы и сети"
Скачать 3.89 Mb.
|
Двоичная запись очень удобна для представления положительных чисел и нуля. Но при переходе к отрицательным числам потребуется дополнительный механизм для указания знака числа. Проще всего использовать для знака старший (левый) бит числа, например: 0000 0100 (обозначает +4) 1000 0100 (обозначает -4) 0111 1111 (обозначает +127) 1111 1111 (обозначает -127) У такого представления, называемого прямым кодом, имеется один серьезный недостаток: для него потребуются специальные арифметические правила. Покажем это на примере использования двоичной арифметики для вычитания +1 из 0 с ожидаемым получением -1: -0000 0000 (0 в прямом коде) 0000 0001 (+1 в прямом коде) 1111 1111 (-127 в прямом коде) При использовании для знаковых чисел (как и для беззнаковых) обычной двоичной арифметики требуется особое представление знаковых чисел, в котором 11111111 представляет -1, а не -127. Кроме того, вычитание +1 из -1 должно давать -2. Выполним это вычитание, чтобы посмотреть, как должно выглядеть -2: 11111111 (это -1) 00000001 (вычитаем +1) 11111110 (и называем это -2) Рассмотренное представление называется дополнительным кодом; в этом коде операции сложения и вычитания дают правильный результат в дополнительном коде, например: +00000011 (+3 в дополнительном коде) 11111110 (-2 в дополнительном коде) 0000 0001 (+1 в дополнительном коде) В дополнительном коде старший бит неотрицательного (положительного или нулевого) числа содержит 0, а отрицательного числа -1. Следовательно, как и в прямом коде, этот бит является знаковым. Знак числа в дополнительном коде можно изменить, если изменить (инвертировать) значение каждого бита и прибавить +1. Например, мы можем получить представление -5 в дополнительном коде из представления +5 в дополнительном коде следующим образом: +00000101 (+5 в дополнительном коде) 11111010 (+5 с измененными битами) 0000 0001 (+1 в дополнительном коде) 11111011 (- 5 в дополнительном коде) Необходимо очень осторожно подходить к увеличению длины чисел, представленных в дополнительном коде. Бели 8-битное число в дополнительном коде расширяется до 16 бит (например, для сложения с 16-битным числом в дополнительном коде), нужно подумать, что же поместить в левые 8 бит. Предположим, что мы хотим прибавить число 0000 0001 (+1 в дополнительном коде) к 0000 0000 0000 0011 (+3 в дополнительном коде). Наверное, ни у кого не возникает сомнений в том, что здесь следует просто добавить в числе +1 восемь нулей с левой стороны, а затем сложить: +0000 0000 0000 0011 (+3 в дополнительном коде) 0000 0000 0000 0001 (+1 в дополнительном коде) 0000 0000 0000 0100 (+4 в дополнительном коде) Однако при необходимости прибавить число 1111 1111 (-1 в дополнительном коде) к числу 0000 0000 0000 0011 (+3 в дополнительном коде) следует добавить к числу -1 слева восемь единиц (добавление нулей превратило бы -1 в положительное число). После этого производится сложение: +0000 0000 0000 0011 (+3 в дополнительном коде) 1111 1111 1111 1111 (-1 в дополнительном коде) 0000 0000 0000 0010 (+2 в дополнительном коде) Следовательно, расширение 8-битного числа в 16-битное выглядит так:
|