Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Прямой, обратный и дополнительный коды
1) Положительные числа. Для положительных чисел прямой код равен обратному коду и равен дополнительному коду. Прямой код Xпр двоичного числа X содержит двоичные цифровые разряды, слева записывается знак числа. Пример. Разместить в разрядной сетке из восьми разрядов положительное число 97. 9710=11000012. Это же число разместим в разрядной сетке из 16 разрядов.
2) Отрицательные числа. Отрицательные числа хранятся в памяти ЭВМ либо в обратном, либо в дополнительном кодах. Обратный код Xобр двоичного отрицательного числа X получается следующим образом: в знаковый разряд числа записывается единица, в цифровых разрядах нули заменяются единицами, а единицы — нулями. Запишем число -4 в обратном коде в 8-ми разрядной сетке. Двоичный код модуля исходного числа равен 1002. Обратный код получается инверсией каждого разряда двоичного кода модуля исходного числа, записанного в 8-ми разрядную сетку. Двоичный код модуля исходного числа равен 00000100. Выполним инверсию каждого разряда. Обратный код числа -4 записывается следующим образом:
Знаковый разряд
Дополнительный код Xдоп отрицательного числа X получается из обратного кода Xобр путем прибавления единицы к самому правому разряду (он называется младшим). Итак, Xдоп=Xобр + 00000001, т.е.
(сложение производим в двоичной системе счисления 12+12=102)
1 1 1 1 1 1 0 0 2726252423222120 Теперь приведем полученное число в десятичную систему счисления 128+64+32+16+8+4=252 Мы получили, что дополнительный код числа –4 в десятичной системе счисления равен 252. Сложим ê-4ê+252=256. 256=28. Количество разрядов сетки было равно 8. Число 252 «дополнило» число ç–4ç до 28 = 1000000010. Теперь сложим два двоичных числа – двоичный код числа ç-4ç в 8-разрядной сетке и дополнительный код числа –4:
11111100 1 000000002 мы получили 28
Запишем общее правило получения дополнительного кода некоторого целого числа х.
x, x>=0 Xдоп = 2k - |x|, x<0, где k – количество разрядов сетки.
Есть еще одно очень простое правило получения дополнительного кода некоторого отрицательного числа. Для получения дополнительного кода, необходимо инвертировать все разряды прямого кода модуля исходного числа начиная с самого левого разряда исключая последнюю единицу и стоящие за ней нули.
00000 100 прямой код ç-4ç 11111 100 инверсия разрядов
Исходя из вышеизложенного, можно определить, что самое маленькое отрицательное число, которое можно записать в 8-ми разрядной сетке — -128, а в 16-ти разрядной сетке — -32768. Прямой, обратный и дополнительный коды введены для упрощения операции вычитания(или алгебраического сложения). При помощи обратного и дополнительного кодов операция вычитания сводится к операции арифметического сложения. При этом операнды представляются либо в обратном, либо в дополнительном коде. Рассмотрим конкретные примеры. Для упрощения будем рассматривать четырехразрядную сетку. а) Вычислить х-у, где х=+6,у=-3, при этом результат является положительным числом. Х-у=6+(-3) хпр=хобр=хдоп=0.110; уобр=1.100; удоп=1.101
Сложение в обратных кодах: хпр=0.110 + уобр=1.100 10.010 + _____ 1 0.011 В данном случае единица, не поместившаяся в разрядную сетку (единица переноса из знакового разряда), циклически прибавляется к правому разряду суммы кодов. Ответом является положительное двоичное число 0.0112=310. Сложение в дополнительных кодах: Хпр=0.100 + удоп=1.101 10.011 ¿ __________ 0.011 При сложении в дополнительных кодах левая единица, вышедшая за границы разрядной сетки отбрасывается. Результатом является положительное число 310. б) Рассмотрим второй случай: числа имеют разные знаки, но в результате получаем отрицательное число. х=-610=-1102 и у=+310=+0112. Хобр=1.001, хдоп=1.010, упр=уобр=удоп=0.011.
Сложение в обратных кодах: хобр=1.001 + упр= 0.011 1.100 В данном случае получен обратный код алгебраической суммы, необходимо перейти от обратного кода к прямому: (х+у)обр=1.100, следовательно, (х+у)пр=-0112=-310(единица в знаковом разряде дает минус, все остальные разряды инвертируются).
Сложение в дополнительных кодах: Хдоп=1.010 + упр=0.011 1.101 Ответ представлен в дополнительном коде, необходимо получить прямой код алгебраической суммы. (1.101)доп ® (1.100)обр ® -0112=-310.
в) Третий случай: оба числа отрицательные. Х=-6=-1102, у=-3=-0112. Хобр=1.001, хдоп=1.010, Уобр=1.100, удоп=1.101. Рассмотрим алгебраическое сложение в дополнительных кодах: 1.010 + 1.101 10.111 В данном случае имеет место так называемое отрицательное переполнение, так как возник перенос только из знакового разряда суммы. Следовательно, результат получился отрицательный и превышающий предельно допустимое значение для данной разрядной сетки. Сдвинем полученный результат на 1 разряд вправо, тогда(х+у)доп=(1.0111)доп. Перейдем от дополнительного кода к прямому: (1.0111)доп ® (1.0110)обр ® (1.1001)пр=-910. Следует отметить, что в процессе выполнения расчетов на ЭВМ может образоваться как «положительный», так и «отрицательный» ноль, причем только в дополнительном коде он имеет единственное представление. Действительно, (+0)пр=0.00…00; (-0)пр=1.00…00, в обратном коде (+0)обр=0.00…00; (-0)обр=1.11…11, в дополнительном коде (+0)доп=0.00…00; (-0)доп=0.00…00. Следует также иметь в виду, для разрядной сетки данной длины дополнительным кодом представляется на единицу больше отрицательных чисел, чем положительных. По этим причинам в ЭВМ для представления отрицательных чисел чаще используется дополнительный код. И последнее очень существенное замечание: При сложении может возникнуть ситуация, когда старший разряд суммы не помещается в отведенной под результат разрядной сетке и он «захватывает» знаковый разряд, естественно значение суммы искажается. Пример. Пусть дана 4-х разрядная сетка со знаком, в которой должен разместиться результат от суммирования двух положительных чисел х=5 и у=7. хпр=0.101, упр=0.111 0.101 + 0.111 1.100 Так как знаковый разряд равен единице, то результат воспринимается как дополнительный код и, если попробовать вывести значение суммы, допустим на экран, процессор перейдет к прямому коду: (1.100)доп ® (1.011)обр ® -1002=-410. Посмотрим, что получится, если под результат отвести шесть разрядов:
0.00101 + 0.00111 0.01100 (х+у)пр=(0.01100)пр=+12. Сумма двух чисел вычислена верно. Выполнить самостоятельно: 1. Найти дополнительные коды для чисел:-45, 123, -98, -А516, -111, -778. Формат представления данных один байт со знаком. 2. Найти дополнительные коды для чисел: -11100018, 234, -456, -АС0916, -32324, СС7816, -110012,. Формат представления данных два байта со знаком.
|