Прямой, обратный, дополнительный коды чисел



 

 В ЭВМ с целью упрощения арифметических операций применяют специальные коды для представления чисел. При помощи этих кодов:

• автоматически определяется знак результата;

• операция вычитания сводится к арифметическому сложению кодов чисел;

• упрощается операционная часть ЭВМ.

Среди арифметических операций основными являются операции сложения и вычитания, поскольку помимо самостоятельного значения, они лежат в основе операций умножения и деления, соответственно.

С целью удобства технической реализации операция вычитания заменяется операцией сложения. При этом исходные операнды (числа, участвующие в операции) должны быть представлены в обратном или в дополнительном коде.

Применяются три формы кодирования целых чисел: прямой код, обратный код, дополнительный код.

Прямой двоичный код Рпр(х) - это такое представление двоичного числа х, при котором знак «плюс» кодируется нулем в старшем разряде числа, а знак «минус» - единицей. При этом старший разряд называется знаковым. Сложение в прямом коде не вызывает затруднений, когда у слагаемых одинаковые знаки: сложить модули и сумме присвоить знак слагаемых. При вычитании чисел в прямом коде нужно сначала определить больший модуль, от него отнять меньший и результату присвоить знак большего модуля.

Обратный код Робр(х) получается из прямого кода по следующему правилу

.

Из приведенного выражения видно, что обратный код для положительных чисел совпадает с прямым кодом. Чтобы представить отрицательное двоичное число в обратном коде нужно оставить в знаковом разряде 1, во всех значащих разрядах заменить 1 на 0, а 0 на 1. Такая операция называется инвертированиеми обозначается горизонтальной чертой над инвертируемым выражением.

Дополнительный код Рдоп(х) образуется следующим образом:

.

Из выражения видно, что дополнительный код положительного числа совпадает с прямым кодом, а для отрицательного числа получается инверсией всех значащих разрядов и добавлением единицы к младшему разряду результата. Дополнительный код может быть получен из обратного кода путём прибавления 1 к младшему разряду обратного кода (естественно, с учётом переносов между разрядами).

Итак:

Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково - двоичными кодами с цифрой 0 в знаковом разряде.

Отрицательные числа в прямом, обратном и дополнительном кодах имеют разное изображение. Обычно отрицательные десятичные числа при вводе в машину автоматически преобразуются в обратный или дополнительный двоичный код и в таком виде хранятся, перемещаются и участвуют в операциях. При выводе таких чисел из машины происходит обратное преобразование в отрицательные десятичные числа.

Пример.

1). Получить обратный, дополнительный коды числа 26. Для записи кода выделен один байт:

х = 2610 = 110102

Рпр(х) = 0’0011010прямой код;

Робр(х )= 0’0011010 - обратный код;

Рдоп(х)= 0’0011010 - дополнительный код.

Данное число положительное, поэтому обратный и дополнительный коды совпадают с прямым кодом числа.

2). Получить обратный, дополнительный коды числа -13. Для записи кода выделен один байт:

х = -1310 = -11012

Рпр(х)=1’0001101прямой код;

Робр(х)=1’1110010 - обратный код (инверсия положительного кода, т.к. данное число отрицательное);

Рдоп(х)=1’1110011 - дополнительный код (к младшему разряду обратного кода прибавляется единица, т.к. данное число отрицательное).

3). Получить обратный, дополнительный коды числа -1001102. Для записи кода выделен один байт:

х = -1001102

Рпр(х)=1’0100110прямой код;

Робр(х)=1’1011001 - обратный код;

Рдоп(х)=1’1011010 - дополнительный код.

Пример. Дано число X=5. Перевести число в прямой, обратный и дополнительный коды. Xпр= Хобр= Хдоп=00000101.

Обратный код отрицательного числа– это инверсия модуля двоичного кода (все цифры, кроме знакового разряда, заменяются на противоположные: 0 на 1, а 1 на 0).

Пример. Дано числоX=-5.Перевести число в обратный код. Хпр =10000101, Хобр=11111010.

Дополнительный код отрицательного числаобразуется путем добавления 1 к младшему разряду обратного кода.

Пример. Дано числоX=-5. Перевести число в дополнительный код.

Хпр =10000101 Хобр=11111010, Хдоп=11111010+1 =11111011.

Пример. Дано целое число 310. Определить дополнительный код данного числа в однобайтовом формате.

Решение. Так как обратный и дополнительный код положительного числа совпадает с прямым кодом, то 310 = 112 =00000011.

Пример. Обратный код целого числа имеет вид X=100110102. Определить значение данного числа в десятичной системе счисления.

Решение. Хобр=10011010, Хпр =11100101111001012 = 1 26 + 1 25 + 1 22 + 1 20 = 64+32+4+1 =-10110.

Пример.Дано число-5010. Определить дополнительный код данного числа в 8-битном формате.

Решение. -5010 = 1100102 =10110010 =11001101 + 1 =110011102.

Пример.Дополнительный код целого числа имеет вид X=101100112. Определить десятичное значение данного числа.

Решение. 101100112 -1=10110010 →11001101110011012 = 1 26 + 1 23 + 1 22 + 1 20 = 64+8+4+1 =-7710.

Следует отметить, что целые числа хранятся в компьютере в двоичном формате. При вводе число записывается в привычной для нас десятичной системе счисления, а компьютер переводит его в двоичную систему.

Для хранения целого числа в оперативной памяти выделяется фиксированное число байтов: один, два, четыре или восемь. Неотрицательные и отрицательные числа хранятся в памяти компьютера по-разному. Один, старший, двоичный разряд отводится под обозначение знака числа. Ноль в старшем разряде означает, что хранится неотрицательное число, единица означает, что число отрицательное.

Примеры.

1. Найти дополнительный код в однобайтном формате числа Х = 710 . Число является целым положительным, его дополнительный код совпадает с прямым кодом. Представим число в двоичной системе и дополним нулями слева до 8 знаков. Ответ: Х = 00000111.

2. Найти обратный код в однобайтном формате числа Х = –3510 . Представим модуль числа Х в двоичной системе и дополним нулями слева до 8 знаков: 00100011. Инвертируем значения всех знаков: 11011100. Ответ: Х = 11011100.

3. Найти дополнительный код в двухбайтном формате числа Х = –56210

Представим модуль числа Х в двоичной системе и дополним нулями слева до 16 знаков: 0000001000110010. Инвертируем значения всех знаков: 1111110111001101, прибавим к полученному обратному коду 1, получим: 1111110111001110. Ответ: Х = 1111110111001110.

4. Дополнительный код числа Х имеет значение 111001112. Найти его значение в десятичной системе счисления. Т.к. в первой позиции числа стоит 1, то искомое число будет отрицательным. Вычтем из заданного значения 1 (11100111 – 1 = 11100110). Инвертируем значения всех знаков: 00011001. Переведем полученное число в десятичную систему 000110012 = 2510 и не забудем, что число является отрицательным. Ответ: Х = –25.


Дата добавления: 2019-09-13; просмотров: 2582; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!