Модифицированные обратный и дополнительный коды.
Лабораторная работа №123. Основы машинной арифметики.
Цель работы.Изучить основы машинной арифметики, представления чисел в прямом, обратном и дополнительном кодах и арифметических операций над ними.
Любые данные (числа, текст, команды программ и др.) в памяти компьютера представлены двоичными кодами, которые представляют собой совокупность битов. В частности, двоичный код, содержащий 8 бит (говорят: "8 разрядов"), называется байтом. Для хранения данных используют следующие форматы двоичного кода: 8-разрядный (байт), 16-разрядный (полуслово), 32-разрядный (слово) и 64-разрядный (двойное слово).
Для выполнения арифметических операций используют специальные коды представления чисел, которые позволяют свести операцию вычитания чисел к арифметическому сложению этих кодов. Различаютпрямой, обратный и дополнительныйкоды. Прямой код используется для представления отрицательных чисел в памяти компьютера, а также при выполнении операций умножения и деления. Обратный и дополнительный коды применяются для выполнения операции вычитания, которую заменяют операцией сложения чисел с разными знаками: а-b=a+(-b).
В коде числа каждому разряду соответствует определенный элемент разрядной сеткой. Для записи знака числа в разрядной сетке имеется строго определенный фиксированный разряд, обычно это крайний разряд разрядной сетке.
Замечание. Условимся при записи кода знаковый разряд числа отделять запятой от других разрядов. Если формат числа не указан будем считать, что число 8-разрядное (байт).
Задание 1. Запишите следующие числа в прямом, обратном и дополнительном кодах.
а) 1101011; б) –101011; в) –101101; г) –1100111.
Методические указания.
Прямой код целого числа. Под прямым кодом двоичного числа понимают запись самого числа. Значение знакового разряда для положительных чисел определяют равным нулю (0), для отрицательных чисел - единице (1). Например, для записи кода используется байт, то:
число | прямой код |
+1101 | 0,0001101 |
–1101 | 1,0001101 |
Крайний левый разряд в прямом коде нами отведен под знак числа, остальные разряды – под само число. Число располагаем в разрядной сетке так, чтобы цифра младшего разряда числа занимала крайнюю правую ячейку.
0, |
|
Обратный код целого числа.Обратный код целого положительного числа совпадает с его прямым кодом. Для отрицательного числа обратный код строится заменой каждого незнакового байта его представления в прямом коде на противоположный (заменим 1 на 0, 0 на 1), знаковый разряд не изменяется.
Пример.
число | прямой код | обратный код | Замечание |
+11011 | 0,00011011 | 0,00011011 | Число положительное, обратный и прямой коды совпадают. |
–11011 | 1,00011011 | 1,11100100 | Число отрицательное, каждый байт, кроме знакового, изменен на противоположный. |
Дополнительный код целого числа.Дополнительный код положительного числа совпадает с его прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
Пример.
число | прямой код | обратный код | дополнительный код |
+1110 | 0,0001110 | 0,0001110 | 0,0001110 |
–1110 | 1,0001110 | 1,1110001 | 1,1110010 |
Задание 2. Переведите числа X и Y в прямой, обратный и дополнительный коды. Выполните сложение в обратном и дополнительном кодах. Результат переведите в прямой код. Полученный результат проверьте, используя правила двоичной арифметики.
а) X= –11010; Y= 100111; | б) X= –11101; Y= –10011; | в) X= 111010; Y= –101111; |
г) X= –101110; Y= –11101; | д) X= 1101011; Y= –1001110; | е) X= –11011; Y= –10111. |
Методические указания.
При сложении чисел в знаковом разряде может появиться две цифры, вторую единицу от запятой называют единицей переноса.
При сложении чисел в дополнительном кодевозникающая единица переноса в знаковом разряде отбрасывается.
При сложении чисел в обратном кодевозникающаяединица переноса в знаковом разряде прибавляется к младшему разряду суммы кодов.
Если результат арифметических действий является кодом отрицательного числа, необходимо преобразовать его в прямой код. При этом обратный код преобразуется в прямой заменой цифр во всех разрядах, кроме знакового, на противоположные. Дополнительный код преобразуется в прямой так же, как и обратный, с последующим прибавлением единицы к младшему разряду.
Пример. Сложить X и Y в обратном и дополнительном кодах:
а) X= 1111 и Y= –101.
Сложим числа, пользуясь:
правилами двоичной арифметики | обратным кодом | дополнительным кодом | ||
X= 1111 Y= – 101 X+Y= 1010 | Xобр= 0,0001111 Yобр= 1,1111010 1 0,0001001 +1 (X+Y)обр= 0,0001010 | Xдоп= 0,0001111
Yдоп= 1,1111011
(X+Y)доп= 0,0001010 |
Так как результат сложения является кодом положительного числа (знаку плюс (+) соответствует 0 в знаковом разряде), то (X+Y)обр=(X+Y)доп=(X+Y) пр.
б) X= –101,Y= –111.
Сложим числа, пользуясь:
правилами двоичной арифметики | обратным кодом | дополнительным кодом | ||
X = – 101 Y = – 111 X+Y= –1100 | Xобр= 1,1111010 Yобр= 1,1111000 1 1,1110010 +1 (X+Y)обр= 1,1110011 | Xдоп= 1,1111011
Yдоп= 1,1111001
(X+Y)доп= 1,1110100 |
Так как сумма является кодом отрицательного числа (знак 1), то необходимо перевести результаты в прямой код:
· из обратного кода: (X+Y)обр=1,1110011 Þ (X+Y)пр=1,0001100;
· из дополнительного кода: (X+Y)доп=1,1110100 Þ (X+Y)пр=1,0001011+0,0000001, (X+Y)пр =1,0001100.
Получили X+Y= –1100, результат совпадает с суммой, полученной по правилам двоичной арифметики.
Задание 3. Сложите числа X и Y в модифицированном обратном и модифицированном дополнительном восьмиразрядных кодах. При обнаружении переполнения увеличьте число разрядов в кодах и повторите суммирование. Результат переведите в прямой код. Полученный результат проверьте, используя правила двоичной арифметики.
а) X= 1101101; Y= 110101; | б) X= 111101; Y= –111001; | в) X= –111010; Y= –1100111; |
г) X= –11001; Y= –100011; | д) X= –10101; Y= 111010; | е) X= –1101; Y= –111011 . |
Методические указания.
Модифицированные обратный и дополнительный коды.
Переполнение разрядной сетки может привести к переносу единицы в знаковый разряд, что приведет к неправильному результату. Положительное число, получившееся в результате арифметической операции может восприниматься как отрицательное, так как в знаковом разряде появится "1" и наоборот.
Например: X = 0,1011110 Y = 0,1101100 X+Y = 1,1001010 |
X и Y – коды положительных чисел, но в процессе сложения в знаковом разряде появилась "1", что означает код отрицательного числа. Чтобы распознать переполнение разрядной сетки вводятся модифицированные коды.
Модифицированный обратный код характеризуется тем, что под знак числа отводится не один, а два разряда. Форма записи чисел в модифицированном обратном коде выглядит следующим образом:
· для положительного числа X= Þ X = ;
· для отрицательного числа X= Þ X = ;
( - обозначение логической операции отрицания "не X", если X=0, то =1; X=1, =0).
В модифицированных обратном и дополнительном кодах под знак числа отводится не один, а два разряда: "00" соответствует знаку "+", "11" – знаку "-". Любая другая комбинация (“01” или “10”), получившаяся в знаковых разрядах является признаком переполнения разрядной сетки. Сложение чисел в модифицированных кодах ничем не отличается от сложения в обычных обратном и дополнительном кодах.
Пример. Даны два числа: X=101001 и Y= –11010. Сложить их в дополнительном и модифицированном дополнительном кодах.
Обычная запись | Обратный код | Модифициро-ванный обратный код | Дополнитель-ный код | Модифициро-ванный дополнительный код |
X=+0101011 Y=–0011110 | Xобр=0,0101011 Yобр=1,1100001 | Х =00,101011 Y =11,100001 | Xдоп=0,0101011 Yдоп=1,1100010 | X =00,101011 Y =11,100010 |
Выполним сложение:
Дополнительный код | Модифицированный дополнительный код | ||||
Xдоп= 0,0101011
Yдоп= 1,1100010
(X+Y)доп= 0,0001101 | X = 00,0101011
Y = 11,1100010
(X+Y) = 00,001101 |
Переполнение не наблюдается (в знаковых разрядах “00”). Результаты, полученные в обычном и модифицированном кодах, совпадают (X+Y=1101).