Прямой код Апр числа со знаком А содержит старший знаковый бит и младшие информационные биты, заполненные в соответствии с представлением числа: целым или с фиксированной запятой:
Обратный код Аобр числа со знаком А для положительного числа совпадает с прямым кодом, для отрицательного – содержит инвертированные информационные биты:
Операция инвертирования или обращения выполняется путем замены 0 на 1, и 1 на 0.
Обратный код с дополнением до единицы или просто дополнительный код А доп числа со знаком А для положительного числа совпадает с прямым и обратным кодом, для отрицательного - содержит инвертированные информационные, биты сложенные с единицей в младшем бите кода:
Операция сложения с единицей в младшем бите выполняется по правилам обычного двоичного сложения. Перенос из знакового бита не учитывается.
Диапазон представления целых чисел со знаком в прямом и обратном коде при разрядности n определяется неравенством:
а чисел с фиксированной запятой - неравенством:
.
Представление в прямом и дополнительном коде имеет недостаток: для представления нуля используются две различные кодовые комбинации. На представление нуля в дополнительном коде требуется только одна кодовая комбинация, поэтому отрицательных чисел представимо на одно больше. Диапазон представления целых чисел со знаком в дополнительном коде разрядности n определяется неравенством:
,
а чисел с фиксированной запятой - неравенством:
Определения кодов построены таким образом, что для отрицательных чисел удобно получить вначале прямой код, затем обращением информационных битов - обратный код, а затем сложением с единицей - дополнительный код.
Примеры
Представим 0(2) и −0(2) в прямом, обратном и дополнительном коде разрядности n = 5.
Запись прямого обратного и дополнительного кодов числа 0(2) представлена на рис. 1, а), числа −0(2) - на рис. 1, б). В прямом коде для хранения «положительного нуля» используется комбинация 00000,«отрицательного нуля» - 10000, в итоге: различные комбинации кода. Но число ноль не может быть положительным или отрицательным! Этот недостаток наследуется обратным кодом: «положительный нуль» − 00000, «отрицательный нуль» −11111. Дополнительный код устраняет этот недостаток, «положительный» и «отрицательный» ноль представлены одной комбинацией кода 00000. При получении дополнительного кода числа − 0(2) возникла ситуация переноса из знакового бита, этот перенос за пределы разрядной сетки не учитывается.
ПК | ПК | ||||||||
ОК | ОК | ||||||||
+ | |||||||||
ДК | ДК | ||||||||
а) | б) |
Рис 1.
1. Записать прямой Апр , обратный Аобр и дополнительный А доп код числа: а) 10110 (2); б) -10110 (2); в) -1110001 (2); г) -0,11011 (2); д)0,00001 (2); е) -0,00001 (2) в разрядности п = 8.
а) Запись кодов числа представлена на рис. 2, а. Задано целое положительное число, поэтому знаковый бит есть 0, информационные биты и незначащие нули записаны по правилу представления целого числа. Для положительного числа прямой, обратный и дополнительный код совпадают.
Ответ: Апр = Аобр = Адоп =00010110.
a) | ПК, | ОК, | ДК | |||||
б) | ПК | |||||||
ОК | ||||||||
ДК | ||||||||
в) | ПК | |||||||
ОК | ||||||||
ДК | ||||||||
г) | ПК | |||||||
ОК | ||||||||
ДК | ||||||||
д) | ПК, | ОК, | ДК | |||||
е) | ПК | |||||||
ОК | ||||||||
ДК | ||||||||
Рис 2.
б) Запись кодов числа представлена на рис. 2, б. Задано целое отрицательное число, следовательно, в прямом коде знаковый бит есть 1, информационные биты и незначащие нули записаны по правилу кодирования целого числа. Из прямого кода инвертированием всех бит кроме знакового, получен обратный код. Добавлением единицы в младший бит обратного кода получен дополнительный код.
Ответ: Апр = 10010110; Аобр = 11101001; Адоп = 11101010.
в) Записи представлены на рис. 2, в.
г) Запись кодов числа представлена на рис. 2, г. Задано отрицательное число с фиксированной запятой, следовательно в прямом коде знаковый бит есть 1, информационные биты и незначащие нули записаны по правилу кодирования числа с фиксированной запятой. Из прямого кода инвертированием всех бит кроме знакового получен обратный код. Добавлением единицы в младший бит обратного кода получен дополнительный код.
Ответ: Апр = 11101100; Аобр = 10010011; Адоп = 10010100.
Пункты д), е) выполняются аналогично г). Записи представлены на рис. 2.д, е.
Прямой код наиболее близок к коду числа без знака, он позволяет преобразовывать информационные биты в традиционную запись числа. Обратный и дополнительный коды используются для выполнения арифметических операций над числами со знаком. Обратный код требует коррекции результата сложения, дополнительный код коррекции не требует. В современных ЭВМ для представления чисел со знаком чаще всего используется дополнительный код.
Под чтением дополнительного кода понимают замену этого кода традиционной записью числа. Дополнительный код положительного числа совпадает с прямым кодом, который легко преобразуется в запись числа согласно представлению: целому или с фиксированной запятой. Для чтения дополнительного кода отрицательного числа выполняют перевод в прямой код обратного числа, затем при записи в традиционной форме дополняют число знаком минус. Перевод дополнительного кода в прямой код обратного числа заключается в инвертировании всех бит и добавлении в младший бит единицы.
Примеры
1. Прочитать целое число в дополнительном коде: а) 001000; б) 10101111; в) 11111; г) 1000.
а) Разрядность n = 6. Знаковый бит: 0, значит число положительное, дополнительный код совпадает с прямым кодом. В прямом коде информационными битами являются биты с 3-го по 6-ой.
Ответ: 1000(2).
б) Разрядность n=8. Знаковый бит: 1, значит число отрицательное. Оборачивая все биты и добавляя единицу в младший бит (рис. 3, а), получаем прямой код обратного) числа. Прямой код преобразуем по правилу кодирования целого числа и дополняем знаком «−».
Ответ:−1010001(2).
a) | ДК | |||||
+ | ||||||
-ПК |
б) | ДК | |||||
-ПК | ||||||
в) | ДК | |||||
-ПК |
Рис 3.
в) Разрядность п = 5. Число отрицательное. Дополнительный кодпреобразуем в прямой код обратного числа (рис. 3, б), при записичисла дополняем знаком «−».
Ответ: −1(2).
г) Разрядность п = 4. Число отрицательное. Дополнительный код и прямой код обратного числа представлен на рис. 3, в. Прямой код дополнительного числа не имеет знакового бита, поэтому старший бит включается в информационные биты.
Ответ: −1000(2).
2. Прочитать число с фиксированной запятой в дополнительном коде: а) 001000; б) 10101111; в) 11111; г) 1000.
а) Разрядность n = 6. Знаковый бит: 0, значит число положительное, дополнительный код совпадает с прямым кодом. В прямом коде информационными битами являются биты со 2-го по 3-ий, в прочих незначащие нули.
Ответ: 0,01(2).
б) Разрядность n = 8. Число отрицательное. Прямой код обратного числа представлен на рис. 3, а. Прямой код преобразуем по правилу кодирования числа с фиксированной запятой и дополняем
знаком «−».
Ответ: −0,1010001(2).
б) Разрядность n = 5. Число отрицательное. Обратного числа представлен на рис. 3, б. Запись числа выполнена по правилу кодирования числа с фиксированной запятой и дополнена знаком «−».
Ответ:−0,0001(2).
г) Разрядность n = 4. Число отрицательное. Дополнительный код и прямой код обратного числа представлен на рис. 14, в. Прямой код дополнительного числа не имеет знакового бита, поэтому старший бит отнесен к информационным.
Ответ: -1 (2).
В последнем примере одни и те же комбинации кода прочитывались различно в зависимости от представления. Для чтения числа необходимо иметь полное описание представления этого числа в памяти!