Чем различаются обратный и дополнительный коды числа в компьютерном представлении отрицательных чисел
Представление отрицательных чисел в компьютере — это их выражение в виде дополнительного кода, который является самым применяемым для этих целей.
Введение
Под дополнительным кодом понимается самый используемый метод задания отрицательных целых чисел в компьютерной среде. Этот код даёт возможность использовать операционную процедуру сложения вместо вычитания, что делает данные процедуры равноценными как для чисел, имеющих знак минус, так и для чисел, не имеющих знака.
Такая числовая организация позволяет сильно упростить структурное построение электронных вычислительных машин. В западных версиях обратный код принято обозначать первым дополнением, а дополнительный код обозначать как второе дополнение. Дополнительный код отрицательного числа возможно сформировать путём инверсии его модуля в двоичном коде с последующим добавлением к инвертированному значению единицы. Этот вариант обозначается как второе дополнение. Дополнительный код числа со знаком минус возможно также сформировать, если вычесть это число из нуля. То есть, дополнительный код числа в двоичном коде, может быть сформирован путём добавления единицы к младшему не нулевому разряду первого дополнения этого числа. Второе дополнение числа в двоичном коде формируется как кодовый набор, который получается при вычитании числа из самой большой степени двойки, то есть из два в степени N для второго дополнения числа, состоящего из N двоичных кодов.
Отрицательные числа в дополнительном коде
Когда число представляется в формате дополнительного кода, то старший разряд будет считаться определяющим знак. Когда этот разряд равняется нулю, то в остальных разрядах записывается значение, которое совпадает с его основным кодированием. Число, состоящее из восьми разрядов в двоичном коде и имеющее знак, возможно представить в дополнительном коде как некое целочисленное значение в зоне от −128 до +127. Когда старший разряд имеет нулевое значение, то наибольшим числовым значением, которое возможно записать в остальных семи позициях, будет: $2^7 – 1$.
Десятичные числа в дополнительном коде
Аналогичная методика применяется и для отображения десятичных чисел в электронных вычислительных машинах. Последовательно выполняется замена символа Х на 9 – Х, и результату добавляется единица. К примеру, если применяются числа из четырёх разрядов, то – 2272 нужно заменить на 7728, то есть 7728 + 2272 = 0000, пятый разряд отбрасывается при этом.
Перевод числа из прямого кода в дополнительный
Готовые работы на аналогичную тему
Получить выполненную работу или консультацию специалиста по вашему учебному проекту Узнать стоимостьЧтобы преобразовать число из прямого кода в дополнительный, нужно:
- В случае равенства нулю старшего числового разряда, являющегося знаковым, никаких переформирований не требуется, поскольку это означает, что число положительное.
- В случае равенства единице старшего разряда числа, представленного в прямом коде, все остальные числовые разряды подвергаются инверсии, а затем к итогу надо прибавить единицу.
Например, необходимо выполнить преобразование отрицательного числа пять, представленного в прямом коде, в формат дополнительного кода. Основным кодом является двоичный код:
Далее необходимо выполнить инверсию числовых разрядов, за исключением знакового, что даёт в результате обратный код числа минус пять:
Осталось прибавить единицу, что даст искомый итоговый дополнительный код:
Основное неудобство построения устройств, реализующих арифметические операции, состоит в сложном характере алгоритма вычитания. Для его преодоления в ЭВМ всегда операция выполняется по иным правилам, чем это делается обычно. В его основе лежит операция сложения. Алгоритмы выполнения такого рода операций требуют специальных кодов представления отрицательных чисел.
Прямой код.
Это естественное и наиболее привычное представление числа в следующем виде:
В цифровых разрядах пишется модуль положительного или отрицательного числа.
[X]пк - обозначим таким образом изображение числа " X " в прямом коде.
Рассмотрим диапазоны представляемых чисел:
X+min = 0,000. 0 - изображение положительного нуля
X+max = 0,111. 1 = 1 - 2 -n
X-max = 1,000. 0 - изображение отрицательного нуля.
Таким образом, нуль имеет двоякое изображение.
Замечания:
- перед выполнением операции вычитания чисел с одинаковыми знаками и сложения с разными, необходимо сравнить по модулю два кода и, если нужно, сделать перестановку кодов местами, затем можно выполнять собственно операцию вычитания кодов.
- при выполнении операции умножения отдельно и независимо находятся модули произведений кодов, а знак находится как результат операции сложения по модулю два:
Вследствие ряда неудобств в ЭВМ операции вычитания, сложения чисел с разными знаками и деления в прямом коде практически не выполняются.
Дополнительный код
Дополнительным называется код, в котором для положительного числа в знаковом разряде пишется "0", в цифровых - модуль числа, а для отрицательного в знаковом разряде пишется "1", в цифровых - дополнение числа до единицы.
Если некоторое X- = -0,x1x2. xn нужно представить в дополнительном коде , то
Прямой код числа кодирует только знаковую информацию и используется для хранения положительных и отрицательных чисел в ЭВМ. Прямой код двоичного числа совпадает по изображению с записью самого числа, но в знаковом разряде ставится 0, если число положительное и, 1 если число отрицательное.
Обратный и дополнительный коды используются для выполнения всех арифметических операций через операцию сложения.
Следует помнить, что положительные числа в обратном и дополнительном коде совпадают с прямым кодом.
1) Прямой код числа (кодируется только знаковая информация), “+”=0; ”-”=1.
Для прямого кода возможны два представления нуля, машинный положительный ноль, т.е. +0,110=0,110, машинный отрицательный ноль, т.е. -0,111=1,111.
Пример перевода
x1=10101-[x1]пр=010101
x2=-11101-[x2]пр=111101
x3=0,101-[x3]пр=0,101
x4=-0,111-[x4]пр=1,111
2) Обратный код числа, используется для выполнения арифметических операций вычитания, умножения, деления, через сложение. Обратный код положительного числа совпадает с его прямым кодом, обратный код отрицательного числа формируется по правилам: в знаковом разряде записывается “1”; цифровые значения меняются на противоположные.
3) Дополнительный код числа, имеет такое же назначение, как и обратный код числа. Формируется по следующим правилам: положительные числа в дополнительном коде выглядят также как и в обратном и в прямом коде, т.е. не изменяются. Отрицательные числа кодируются следующим образом: к обратному коду отрицательного числа (к младшему разряду) добавляется 1, по правилу двоичной арифметики.
Пример перевода
x1=10101-[x1]доп=010101
x2=-11101-[x2]обр=100010+1-[x2]доп=100011
x3=0,101-[x3]доп=0,101
x4=-0,111-[x4]обр=1,000+1-[x4]доп=1,001
Для выявления ошибок при выполнении арифметических операций используются также модифицированные коды: модифицированный прямой; модифицированный обратный; модифицированный дополнительный, для которых под код знака числа отводится два разряда, т.е. “+”=00; ”-”=11. Если в результате выполнения операции в знаковом разряде появляется комбинация 10 или 01 то для машины это признак ошибки, если 00 или 11 то результат верный.
Как определить, положительное или отрицательное число? Знак числа определяет старший бит: 0 - положительное число, 1 - отрицательное число. Например, для числа 1,001 сразу можно определить, что оно отрицательное (меньше нуля).
ПРИМЕР .
Запишите код действительного числа, интерпретируя его как величину типа Double.
а) 446,15625;
Переводим десятичное число в двоичное представление.
Целая часть от деления | Остаток от деления |
446 div 2 = 223 | 446 mod 2 = 0 |
223 div 2 = 111 | 223 mod 2 = 1 |
111 div 2 = 55 | 111 mod 2 = 1 |
55 div 2 = 27 | 55 mod 2 = 1 |
27 div 2 = 13 | 27 mod 2 = 1 |
13 div 2 = 6 | 13 mod 2 = 1 |
6 div 2 = 3 | 6 mod 2 = 0 |
3 div 2 = 1 | 3 mod 2 = 1 |
1 div 2 = 0 | 1 mod 2 = 1 |
Остаток от деления записываем в обратном порядке. Получаем число в 2-ой системе счисления: 110111110
446 = 110111110 2
Для перевода дробной части числа последовательно умножаем дробную часть на основание 2. В результате каждый раз записываем целую часть произведения.
0.15625*2 = 0.313 (целая часть 0 )
0.313*2 = 0.626 (целая часть 0 )
0.626*2 = 1.252 (целая часть 1 )
0.252*2 = 0.504 (целая часть 0 )
0.504*2 = 1.008 (целая часть 1)
Получаем число в 2-ой системе счисления: 00101
0.15625 = 001012
446.15625 = 110111110,001012 = 1,1011111000101*2 8
Знак S = 0
Порядок P = 8 + 1023 = 103110 = 100000001112
Мантисса: 1011111000101
Для числа с двойной точностью мантисса занимает 52 разряда. Добавляем нули.
Мантисса: 1011 1110 0010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Запишем число:
0 10000000111 1011 1110 0010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000
В шестнадцатеричной системе счисления: 407BE2800000000016
б) -455,375.
Переводим десятичное число в двоичное представление.
Целая часть от деления | Остаток от деления |
455 div 2 = 227 | 455 mod 2 = 1 |
227 div 2 = 113 | 227 mod 2 = 1 |
113 div 2 = 56 | 113 mod 2 = 1 |
56 div 2 = 28 | 56 mod 2 = 0 |
28 div 2 = 14 | 28 mod 2 = 0 |
14 div 2 = 7 | 14 mod 2 = 0 |
7 div 2 = 3 | 7 mod 2 = 1 |
3 div 2 = 1 | 3 mod 2 = 1 |
1 div 2 = 0 | 1 mod 2 = 1 |
Остаток от деления записываем в обратном порядке. Получаем число в 2-ой системе счисления: 111000111
455 = 111000111 2
Для перевода дробной части числа последовательно умножаем дробную часть на основание 2. В результате каждый раз записываем целую часть произведения.
0.375*2 = 0.75 (целая часть 0 )
0.75*2 = 1.5 (целая часть 1 )
0.5*2 = 1 (целая часть 1 )
0*2 = 0 (целая часть 0 )
Получаем число в 2-ой системе счисления: 0110
0.375 = 0110 2
455,375 = 111000111,01102 = 1,110001110110*2 8 2
Знак S = 1
Порядок P = 8 + 1023 = 103110 = 100000001112
Мантисса: 1100 0111 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Запишем число:
1 10000000111 1100 0111 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
В шестнадцатеричной системе счисления: -455,375 = C07C76000000000016
Дан код величины типа Double. Преобразуйте его число.
а) 408B894000000000;
Представим в двоичном коде:
010000001000 1011 1000 1001 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000
где
S = 0 (положительное число)
P = 100000010002 = 1032 – 1023 = 9
M = 10111000100101
N = 1,10111000100101
С учетом P = 9, N = 1101110001,00101
1101110001 = 2 9 *1 + 2 8 *1 + 2 7 *0 + 2 6 *1 + 2 5 *1 + 2 4 *1 + 2 3 *0 + 2 2 *0+ 2 1 *0 + 2 0 *1 = 512 + 256 + 0 + 64 + 32 + 16 + 0 + 0 + 0 + 1 = 881
Для перевода дробной части необходимо разделить разряд числа на соответствующую ему степень разряда
00101 = 2 -1 *0 + 2 -2 *0 + 2 -3 *1 + 2 -4 *0 + 2 -5 *1 = 0.15625
б) C089930000000000.
Представим в двоичном коде:
1 10000001000 100110010011000000000000000000000000 0000 0000 0000 0000
где
S = 1 (отрицательное число)
P = 100000010002 = 1032 – 1023 = 9
M = 100110010011
N =1,100110010011
С учетом P = 9, N = 1100110010,011
1100110010 = 2 9 *1 + 2 8 *1 + 2 7 *0 + 2 6 *0 + 2 5 *1 + 2 4 *1 + 2 3 *0 + 2 2 *0 + 2 1 *1 + 2 0 *0 = 512 + 256 + 0 + 0 + 32 + 16 + 0 + 0 + 2 + 0 = 818
Для перевода дробной части необходимо разделить разряд числа на соответствующую ему степень разряда
011 = 2 -1 *0 + 2 -2 *1 + 2 -3 *1 = 0.375
Читайте также: