прямой обратный и дополненный код

Содержание

Вычислительная техника и программирование/Занятие 4

Содержание

Машинные коды [ править ]

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

Различают следующие коды двоичных чисел:

Прямой код [ править ]

Прямой код двоичного числа образуется из абсолютного значения этого числа и кода знака (0 или 1) перед его старшим числовым разрядом.

Обратный код [ править ]

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

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

Дополнительный код [ править ]

Основные свойства дополнительного кода:

• сложение дополнительных кодов положительного числа С с его отрицательным значением дает т.н. машинную единицу дополнительного кода:

МЕдк=МЕок + 2 0 = 10|00…00,

т.е. число 10 (два) в знаковых разрядах числа;

• дополнительный код называется так потому, что представление отрицательных чисел является дополнением прямого кода чисел до машинной единицы

Модифицированные обратные и дополнительные коды [ править ]

Модифицированные обратные и дополнительные коды двоичных чисел отличаются соответственно от обратных и дополнительных кодов удвоением значений знаковых разрядов. Знак «+» в этих кодах кодируется двумя нулевыми знаковыми разрядами, а знак «–» – двумя единичными разрядами.

Арифметические действия в машинных кодах. [ править ]

Сложение (вычитание). Операция вычитания приводится к операции сложения путем преобразования чисел в обратный или дополнительный код согласно таблице.

Требуемая операция Необходимое преобразование
А+В А+В
А-В А+(-В)
-А+В (-А)+В
-А-В (-А)+(-В)

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

Читайте также:  кыргызстан код страны по классификатору оксм

Пример 1. Сложить два числа: А10 = 7, В10 = 16.

Исходные числа имеют различную разрядность, необходимо провести выравнивание разрядной сетки:

Сложение в обратном или дополнительном коде дает один и тот же результат:

По таблице необходимо преобразование А+(-В), в которой второй член преобразуется с учетом знака

%D0%A1%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5 %D0%B2 %D0%9E%D0%9A %D0%B8 %D0%94%D0%9A

При сложении чисел в ОК и ДК были получены переносы в знаковый разряд и из знакового разряда. В случае ОК перенос из знакового разряда требует дополнительного прибавления единицы младшего разряда (п.4 правил). В случае ДК этот перенос игнорируется.

Практическая часть. [ править ]

Источник

Обратный и дополнительный коды двоичных чисел

l4 image002equation distanceprojection image013 piramid linep image002

Пример перевода
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 то результат верный.

Источник

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

Выбор способа хранения целых чисел в памяти компьютера — не такая тривиальная задача, как могло бы показаться на первый взгляд. Желательно, чтобы этот способ:

Рассмотрим разные методы представления.

Содержание

Прямой код [ править ]

230px %D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 %D0%B4%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D1%85 %D1%87%D0%B8%D1%81%D0%B5%D0%BB %D0%B2 %D0%BF%D1%80%D1%8F%D0%BC%D0%BE%D0%BC %D0%BA%D0%BE%D0%B4%D0%B5

Достоинства представления чисел с помощью прямого кода [ править ]

Недостатки представления чисел с помощью прямого кода [ править ]

Из-за весьма существенных недостатков прямой код используется очень редко.

Код со сдвигом [ править ]

230px %D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 %D0%B4%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D1%85 %D1%87%D0%B8%D1%81%D0%B5%D0%BB %D0%B2 %D0%BA%D0%BE%D0%B4%D0%B5 %D1%81%D0%BE %D1%81%D0%B4%D0%B2%D0%B8%D0%B3%D0%BE%D0%BC

По сути, при таком кодировании:

Достоинства представления чисел с помощью кода со сдвигом [ править ]

Недостатки представления чисел с помощью кода со сдвигом [ править ]

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

Дополнительный код (дополнение до единицы) [ править ]

%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 %D1%87%D0%B8%D1%81%D0%B5%D0%BB %D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC %D0%B4%D0%BE %D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%86%D1%8B

В качестве альтернативы представления целых чисел может использоваться код с дополнением до единицы (англ. Ones’ complement).

Читайте также:  коды для клуба романтики на алмазы

Алгоритм получения кода числа:

Достоинства представления чисел с помощью кода с дополнением до единицы [ править ]

Недостатки представления чисел с помощью кода с дополнением до единицы [ править ]

Дополнительный код (дополнение до двух) [ править ]

230px %D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 %D0%B4%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D1%85 %D1%87%D0%B8%D1%81%D0%B5%D0%BB %D0%B2 %D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC %D0%BA%D0%BE%D0%B4%D0%B5

Чаще всего для представления отрицательных чисел используется код с дополнением до двух (англ. Two’s complement).

Алгоритм получения дополнительного кода числа:

Длинная арифметика для чисел, представленных с помощью кода с дополнением до двух [ править ]

Достоинства представления чисел с помощью кода с дополнением до двух [ править ]

Недостатки представления чисел с помощью кода с дополнением до двух [ править ]

Несмотря на недостатки, дополнение до двух в современных вычислительных системах используется чаще всего.

Источник

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

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

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

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

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

Прямой код числа это представление беззнакового двоичного числа. Если речь идет о машинной арифметике, то как правило на представление числа отводится определенное ограниченное число разрядов. Диапазон чисел, который можно представить числом разрядов n равен

Обратный код числа, или дополнение до единицы (one’s complement) это инвертирование прямого кода (поэтому его еще называют инверсный код). То есть все нули заменяются на единицы, а единицы на нули.

Дополнительный код числа, или дополнение до двойки (two’s complement) это обратный код, к младшему значащему разряду которого прибавлена единица

А теперь «зачем, зачем это все?» ©

Для различия положительных и отрицательных чисел выделяют старший разряд числа, который называется знаковым (sign bit)
0 в этом разряде говорит нам о том, что это положительное число, а 1 — отрицательное.

С положительными числами все вроде бы понятно, для их представления можно использовать прямой код
0 — 0000
1 — 0001
7 — 0111

А как представить отрицательные числа?

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

Пара примеров
7-3=4
0111 прямой код 7
1101 дополнительный код 3
0100 результат сложения 4

-1+7=6
1111 дополнительный код 1
0111 прямой код 7
0110 результат сложения 6

Что касается переполнения — оно определяется по двум последним переносам, включая перенос за старший разряд. При этом если переносы 11 или 00, то переполнения не было, а если 01 или 10, то было. При этом, если переполнения не было, то выход за разряды можно игнорировать.

Читайте также:  мсс коды росбанк действующие

Примеры где показаны переносы и пятый разряд

00111 прямой код 7
00001 прямой код 1
01110 переносы
01000 результат 8 — переполнение

Два последних переноса 01 — переполнение

-7+7=0
00111 прямой код 7
01001 дополнительный код 7
11110 переносы
10000 результат 16 — но пятый разряд можно игнорировать, реальный результат 0

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

Вот благодаря таким удобным свойствам дополнительный код это самый распространенный способ представления отрицательных чисел в машинной арифметике.

Источник

Представление чисел в ЭВМ

Целые числа

Прямой код Обратный код Дополнительный код
0,0001101 0,0001101 0,0001101
Прямой код Обратный код Дополнительный код
1,0001101 1,1110010 1,1110011

Вещественные числа (числа с плавающей точкой)

i1 image001

Целая часть от деления Остаток от деления
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

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 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

Дан код величины типа 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

б) 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

Источник

Поделиться с друзьями
admin
Здоровый образ жизни: советы и рекомендации
Adblock
detector