Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Организация ЭВМ и систем. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
4 Кодирование числовой информации. Представление чисел в
ЭВМ
Двоичная система счисления применяется для представления данных в элек-
тронных вычислительных машинах. Это обусловлено тем, что эти устройства функ-
ционируют на основе двоичных элементов, которые могут находиться в двух состо-
яниях. Двоичные коды используются для кодирования двоичных, десятичных и шестнадцатеричных чисел.
Когда числовая информация подвергается обработке в вычислительных
устройствах, существуют ограничения на количество разрядов, которые могут быть
использованы для представления этой информации. Это ограничение определяется
форматами полей фиксированной и переменной длины, а также числом разрядов в
арифметическом устройстве вычислительной машины. Если результат арифметиче-
ских операций содержит больше разрядов, чем позволяет аппаратное обеспечение,
то часть старших разрядов будет утеряна.
Процесс, при котором сохраняется определенное количество младших разря-
дов числа, а старшие разряды отбрасываются, аналогичен математической опера-
ции, называемой вычетом по модулю. Такой же принцип используется в арифмети-
ческих устройствах компьютеров и позволяет представлять отрицательные числа.
4.1 Машинные коды для представления чисел
Рассмотрим теперь машинные коды, которые используются в вычислительной
машине для представления чисел. Представление любого вида информации в ЭВМ
осуществляется в виде комбинации нулей и единиц в заданных границах поля дан-
ных. Другими словами, преимущественное применение в машине имеет двоичная
система счисления с основанием p=2
  

(1)
где М – модуль;
51
m – число разрядов двоичного представления информации.
Абсолютная величина чисел должна удовлетворять условию
 
  

(2)
Таким образом, количество значащих разрядов двоичного числа не должно
превышать величину m-1
󰇟󰇠
    (3)

На практике применяются четыре основных типа машинных кодов: прямой,
обратный, дополнительный и смещенный [6].
Прямой код в машине в основном используется для представления положи-
тельных чисел. Если положительные и отрицательные числа представляются в пря-
мом коде, то один разряд используется в качестве идентификатора знака.
Примем для некоторой гипотетической машины формат машинного слова,
равным 1 байту (8 бит). Машинный код числа будем обозначать следующим обра-
зом: [А]
– прямой, [А]
пр
– обратный, [А]
обр
– дополнительный, [А]
доп
– смещенный.
см
Двоичный код числа представим в виде
  
где xi – двоичные разряды, принимающие значение 0 или 1; индекс i соответствует номеру бита в байте. Предположим, что положительные и отрицательные числа в данной машине
представляются в прямом коде. Тогда один разряд в слове необходимо отвести под
код знака. Предположим, что этим разрядом будет бит x7, причем x
=0 означает знак
7
«+», а x7=1, означает знак «-». Тогда, если А 0, то 󰇟󰇠 
если А < 0, то 󰇟󰇠 
Пример. Представить в прямом коде двоичные числа: +101
+1000010
(2)
:
, -101
(2)
(2)
,
а) [+101]
= 0000 0101;
пр
б) [- 101]пр= 1000 0101;
в) [+1000010]
=0100 0010.
пр
52
Рассмотрим теперь дополнительный и обратный коды. Из соотношений (1) и
(3) следует
  󰇟󰇠


(4)
Из обеих частей равенства (4) вычтем единицу   󰇟󰇠

  

󰇛󰇜
    
(5)
󰇛󰇜
Введем обозначение 󰇟󰇠
Двоичное число [А]
называется обратным кодом двоичного числа А.
обр

 󰇟󰇠
  (6)

Из (5) и (6) следует

  󰇟󰇠

󰇛󰇜
(7)
Из равенства (7) можно сделать вывод, что сумма одноименных разрядов чи-
сел А и [А]
всегда равна 1. Отсюда следует простое правило вычисления обратно-
обр
го кода. Обратный код числа получается из прямого кода инвертированием двоич-
ного разряда, кроме знакового, т.е. 0 меняется на 1, а 1 на 0
где
– инверсия X.
󰇟󰇠

󰇠
󰇟
 

,
Из (7) вытекает, что обратный код является дополнением до максимального
двоичного числа, представимого в данном формате

 
󰇛󰇜
Дополнительный код получается из обратного, на основании (4)
󰇟󰇠

󰇟
󰇠
  (8)

Следовательно, дополнительный код может быть получен из обратного фор-
мальным суммированием обратного кода числа с единицей младшего разряда. При возникновении переноса из старшего разряда он теряется
󰇟󰇠
   (9)

53
Обратный и дополнительный код в вычислительной машине используется для
представления отрицательных чисел.
Пример. Представить в обратном и дополнительном кодах отрицательные
числа: -1000
и -11111
(2)
а) [-1000] [-1000] [-1000]
(2)
= 1000 1000, б) [-11111]
пр
= 1111 0111, [-11111]
обр
= 1111 1000; [-11111]
доп
= 1001 1111,
пр
=1110 0000,
обр
=1110 0001.
доп
Пример. Найти прямой код отрицательного числа по его заданному дополни-
тельному коду
[А] [[А] [А]
= 1111 1000,
доп
доп]обр
пр
=1000 0111,
= [[А]
доп]доп
=1000 1000.
Применение дополнительного кода позволяет формально производить дей-
ствия с соответствующими кодами чисел. Результат в зависимости от значения
(меньше или больше нуля) автоматически представляется в прямом или дополни-
тельном коде. Арифметические операции выполняются над двоичными m-
разрядными числами, включая знаковый, который ничем не отличается от осталь-
ных разрядов числа.
Пример. Вычислить выражения (11
(2)-1(2)
) и (-11
(2)-1(2)
), пользуясь представле-
нием числа в машинных кодах:
а) представим числа, входящие в выражения в машинных кодах.
[11] [-11] [-11] [1] [-1] [-1]
= 0000 0011,
пр
= 1111 1100,
обр
= 1111 1101,
доп
= 0000 0001,
пр
= 1111 1110,
обр
=1111 1111.
доп
54
б) вычислим значение выражения (11
+
+
0000 0011 1111 1111
[А]пр = 0000 0010
(2)-1(2)
)
Результат [А]
соответствует числу А=10
пр
в) вычислим значение выражения (-11
1111 1101 1111 1111
[[А]
[А]
Результат [А]
доп]обр
=0000 0011 и А=[[А]
Итак (11 - 1) = 10
= 1111 1100
доп
соответствует числу А=-100
доп
(2)
доп]доп
и (-11-1)=-100
Заменив двоичные числа в выражениях их десятичными эквивалентами, убеж-
даемся в правильности результатов
(3-1) = 2 и (-3-1) = -4.
- 1
(2)
=0000 0100
.
(2)
(2)
(2)
(2)
;
.
)
, т.к. [А]
(2)
=1111 1100, а
доп
4.2 Признаки переполнения разрядной сетки
В случае, когда результат арифметических операций выходит за пределы до-
пустимого диапазона, установленного в разрядной сетке, компьютер обнаруживает
переполнение, что может привести к аварийному завершению выполнения задачи.
Рассмотрим формальный признак, по которому определяется переполнение в
компьютере. Для этого различают два типа переносов: согласованные и несогласо-
ванные.
Перенос считается согласованным, если одновременно происходит перенос из
старшего разряда числа в его знаковый разряд и за пределы разрядной сетки. В этом
случае не происходит переполнения, и операция завершается нормально.
Перенос считается несогласованным, если он происходит либо только из
старшего разряда числа в его знаковый разряд, либо только за пределы разрядной
сетки. В первом случае фиксируется положительное переполнение (при сложении
55
двух положительных чисел), а во втором случае – отрицательное (при сложении
+
+
+
+
+
+
+
+
двух отрицательных чисел).
Приведем примеры согласованных и несогласованных переносов.
Пример. Сложим два десятичных числа А=120 и В=7, представленных в дво-
ичной СС в 8-разрядной сетке:
[120]пр [А] [7]пр [В] [127]
[А+В]
пр
= 0111 1000
пр
= 0000 0111
пр
= 0111 1111
пр
Операция завершена нормально. Переносы отсутствуют. Пример. Сложим два десятичных числа А=-120 и В=-7, представленных в
двоичной СС в 8-разрядной. сетке:
[-120] [-7] [-127]
доп
доп
доп
[А]
доп
[B]
доп
[A+B]
= 1000 1000
= 1111 1001
= 11000 0001
доп
Операция завершена нормально, переносы согласованы: одновременный пе-
ренос из старшего разряда числа в знаковый и из знакового за пределы разрядной
сетки.
Пример. Сложим два десятичных числа А=121 и В=7, представленных в дво-
ичной СС в 8-разрядной сетке:
[121] [7]
пр
пр
[128]пр [А+В]
[А]
[В]
= 0111 1001
пр
= 0000 0111
пр
= 1000 0000
пр
Перенос не согласован, так как он возникает только из старшего разряда в зна-
ковый. Фиксируется положительное переполнение.
Пример. Сложить два десятичных числа А=-120 и В=-9, представленных в
двоичной СС в 8-разрядной сетке
[-120] [-9] [-129]
доп
доп
доп
[А]
доп
[В]
доп
[А+В]
= 1000 1000 = 1111 0111
= 1 0111 1111
доп
56
Перенос не согласован, так как он возникает только из знакового разряда и пе-
реходит за пределы разрядной сетки. Фиксируется отрицательное переполнение.
Заметим, что при положительном переполнении знаковый разряд суммы содержит
1, а при отрицательном переполнении 0, что противоречит действительности.
Заметим, что максимальное положительное число, которое размещается в 8-
разрядной сетке, соответствует десятичному +127 или двоичному 1000 0000
[1000 0000
доп]доп
=1000 0000.
ибо
(2)
При возникновении переполнения, если программист не заблокирует с помо-
щью специальной команды прерывание, происходит аварийное завершение задачи.
Помимо рассмотренных кодов для представления чисел со знаком применяет-
ся еще смещенный код. Этот код обычно используется для представления целых чи-
сел, задающих порядки с плавающей точкой. Определяется смещенный код двоич-
ного числа G, представленного в n-разрядной сетке, как G
= А+G, либо, то же са-
см
мое,
   

,
   
где А (смещение) – величина, равная весу старшего разряда сетки (для целых
n-1
А=2
).
Диапазон представляемых чисел такой же, как и у дополнительного кода.
Единица в знаковом разряде смещенного кода указывает на представление положи-
тельного числа, нуль – отрицательного.
Цифровые разряды смещенного кода для положительного числа представляют
собой модуль этого числа, для отрицательного инверсию модуля, к которой под-
суммирована 1 к младшему разряду.
Существует простое правило перехода к смещенному коду от дополнительно-
го (и наоборот): для перехода необходимо инвертировать знаковый разряд кода.
Важной особенностью смещенного кода является то, что из G1
> G2см следу-
cм
ет G1 > G2. Использование смещенных кодов упрощает сравнение чисел со знаком,
сводя его к сравнению представляющих чисел без знака (смещенных кодов).
57
Правило для смещенных кодов: сумма смещенных кодов с инвертированным
+
+
+
+
старшим (знаковым) разрядом дает смещенный код суммы, при этом признаком по-
лучения положительного (отрицательного) переполнения является наличие (отсут-
ствие) переноса из знакового разряда суммы, имевшего до инверсии значение 1 (0).
Примеры.
(25)10 = (1001 1001)см (125)10 = (1111 1101)см (150)10 = (111001 0110)см – положительное переполнение
(25)10 = (1001 1001)см (25)10 = (1001 1001)см (50)10 = (10011 0010)см – нет переполнения
(-25)10 = (0110 0111)см (-125)10 = (0000 0011)см (-150)10 = (0110 1010)см – отрицательное переполнение
(-25)10 = (0110 0111)см (-25)10 = (0110 0111)см (-50)10 = (1100 1110)см – нет переполнения.
На рисунке 4.1 представлен пример сложения двух чисел со знаком на вось-
миразрядном сумматоре с переполнением, а на рисунке 4.2 – без переполнения.
58
Рисунок 4.1 – Пример сложения двух чисел со знаком на восьмиразрядном
сумматоре с переполнением
Рисунок 4.2 – Пример сложения двух чисел со знаком на восьмиразрядном
сумматоре с переполнением
Проверить правильность проведенных вычислений можно с помощью
специальной программы моделирования Electronics Workbench, как показано на рисунках 4.3 и 4.4.
59
Рисунок 4.3 – Пример сложения чисел 50+80
Рисунок 4.4 – Пример сложения чисел 50+(-80)
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]