Прямой, обратный, дополнительный коды чисел
В ЭВМ с целью упрощения арифметических операций применяют специальные коды для представления чисел. При помощи этих кодов:
• автоматически определяется знак результата;
• операция вычитания сводится к арифметическому сложению кодов чисел;
• упрощается операционная часть ЭВМ.
Среди арифметических операций основными являются операции сложения и вычитания, поскольку помимо самостоятельного значения, они лежат в основе операций умножения и деления, соответственно.
С целью удобства технической реализации операция вычитания заменяется операцией сложения. При этом исходные операнды (числа, участвующие в операции) должны быть представлены в обратном или в дополнительном коде.
Применяются три формы кодирования целых чисел: прямой код, обратный код, дополнительный код.
Прямой двоичный код Рпр(х) - это такое представление двоичного числа х, при котором знак «плюс» кодируется нулем в старшем разряде числа, а знак «минус» - единицей. При этом старший разряд называется знаковым. Сложение в прямом коде не вызывает затруднений, когда у слагаемых одинаковые знаки: сложить модули и сумме присвоить знак слагаемых. При вычитании чисел в прямом коде нужно сначала определить больший модуль, от него отнять меньший и результату присвоить знак большего модуля.
Обратный код Робр(х) получается из прямого кода по следующему правилу
.
Из приведенного выражения видно, что обратный код для положительных чисел совпадает с прямым кодом. Чтобы представить отрицательное двоичное число в обратном коде нужно оставить в знаковом разряде 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!