4.2 Обратный код
Обратный код двоичного числа G, представляемого в n-разрядной сетке, определяется как:
где В – величина наибольшего числа без знака в n-разрядной сетке, для целых
В = 2n - 1
Если n = 8, то В = |
|
= 2n - 1 |
Диапазон чисел, представляемых обратным кодом, такой же, как и у прямых кодов:
Правило:
Цифроразряды положительного числа остаются без изменения.
По определению обратный код отрицательного числа – это дополнение модуля исходного числа до наибольшего числа без знака, помещающегося в разрядную сетку. Для получения обратного кода отрицательного числа нужно сформировать инверсию n-разрядного модуля этого числа. В знаковом разряде обратного кода у положительных чисел записывается 0, у отрицательных 1.
А = +1011 Аобр = 0.0001011
В = -1101 Вобр = 1.1110010
4.3 Дополнительный код
Дополнительный код двоичного числа G, представляемого в n-разрядной сетке, определяется как:
где С – вес разряда, следующего за старшим разрядом используемой разрядной сетки. Для дробей С = 2, а для целых
С = 2n
Если n = 8, то С = 1.00000000 = 28 = 255.
Диапазон чисел, представляемых дополнительным кодом, отличается от диапазона прямого или обратного кода. Для положительных и отрицательных чисел поддиапазоны различны.
Диапазон положительных чисел, представляемых дополнительным кодом (как и у прямого):
отрицательных чисел:
(несимметричный
диапазон)
Дополнительный код удобно получать из обратного.
Рисунок 4.3 - Поддиапазоны дополнительного кода.
Правило:
Цифроразряды положительного числа остаются без изменения.
Дополнительный код отрицательного числа может быть получен путем прибавления единицы к младшему разряду обратного кода.
В знаковом разряде положительных чисел записывается 0, отрицательных 1.
А = +1011 Адоп = 0.0001011
В = -1101 Вдоп = 1.1110011
4.6 Выполнение арифметических операций над числами в кодах
При сложении в прямом коде чисел с одинаковыми знаками слагаемые складываются, и сумме присваивается код знака слагаемых.
При сложении в прямом коде чисел с разными знаками необходимо:
определить большее по модулю число;
вычесть из большего числа меньшее;
присвоить разности знак большего по модулю числа.
Алгебраическое сложение сводится к простому арифметическому сложению при помощи обратных и дополнительных кодов.
Предположим, что код суммы может быть представлен в n-разрядной сетке. Т.е. модуль алгебраической суммы меньше 1 для дробей и меньше 2n-1 для целых.
Правило:
При алгебраическом сложении двух двоичных чисел в обратном или дополнительном кодах, арифметически суммируются все разряды этих кодов, т.е. включая и знаковый. При этом при сложении чисел обратных кодах единица переноса из знакового разряда по цепи циклического переноса прибавляется к младшему разряду суммы, а при сложении чисел в дополнительном коде единица переноса из знакового разряда, если он возникает, теряется.
4.7 Выполнение операций в обратном и дополнительном кодах
Виконаємо нижчеперелічені операції, з використанням додаткового коду.
а) С=А+В ; б) С=А-В ; в) С=-А+В ; г) С=-А -В ;
де , А=6510, В=4210
1) Представимо числа у двійковій системі числення. А2=1000001, В2=101010
2) Виберемо мінімально можливу довжину розрядної сітки, щоб можна було розмістити операнди А і В з урахуванням знакового біта. Пам’ятайте, що довжина розрядної сітки може дорівнювати 1,2 або 4 байти. Для нашого приклада достатньо одного байта (8 двійкових розрядів). Увага! Формат один байт дозволяє представити додаткові коди чисел зі знаком у діапазоні від -12810 до +12710
3) З урахуванням довжини розрядної сітки, отримаємо: 6510 = 010000012. Зверніть увагу на те, що нулі , у двійковому поданні числа, додані для доповнення розрядної сітки до восьми біт. Аналогічно: 4210 = 001010102.
4) У завданні С=А+В числа додаються додатні, тому представляємо їх у прямому коді. Пам’ятайте ! Записи позитивних чисел у всіх кодах однакові й збігаються із прямим кодом.
Апр= 0.1000001
Впр= 0.0101010
------------------------
Спр= 0.1101011 - двійкова сума
Можна переконатися, що отримана сума це число С= +11010112= +10710
0*27+1*26+1*25+0*24+1*23+0*22+1*21+1*20 = 64+32+8+2+1 = 107
5) Ми розглянули додавання додатних чисел у комп'ютері. Яким чином здійснюється операція - віднімання ? Операція віднімання замінюється додаванням. Наприклад, нехай треба виконати віднімання:
С=А-В=65 - 42. Замінимо віднімання операцією додавання, змінивши знак числа В на протилежний: С=А+(-В)= 65 + (-42)=13. Внаслідок зміни знаку, число В стало від’ємним. А від’ємні числа представляються у вигляді ДОДАТКОВОГО КОДУ.
- В= - 4210 = - 001010102
Додатковий код числа (- В)
Вдод = 1.1010101+0.0000001=1.1010110
Переконаємося в правильності подання. Сума +65 і -65 повинна скласти нуль:
+0.1000001
1.0111111
-----------
(1) 0.0000000
Усі вісім біт мають нульове значення. Одиниця переносу (1)зі знакового розряду «відкидається». Це правило дозволяє виконувати віднімання чисел у двійковій системі числення: віднімання заміняється додаванням – знак від’ємника змінюється на протилежний.
Ураховуючи вище викладене – виконаємо С=А-В
Апр= 0.1000001
1 ┐ одиниця переносу зі знакового розряду «губиться»
65 Апр = 0.1000001
-42 Вдод = 1.1010110
------- ------------------------
23 Спр= 0.0010111 - двійкова сума
Код результату визначеній за значенням знакового розряду.
Дії, наведені нижче, у детальних поясненнях не мають потреби.
С=-А+В
-А10= - 65; -A2= - 1000001
Апр = 1.1000001 ; Aдод = 1.0111110 + 0.0000001 = 1.0111111 – виділення розрядів числа іншим кольором не випадково. Зверніть увагу, що двійкове число 01111112 = 6310 є доповненням числа 6510 (10000012) до 12810 (100000002) .
Aдод =1.0111111 (-65)10
Впр = 0.0101010 (+42)10
--------------------------
Сдод = 1.1101001
Код суми С (додатковий) визначений по знаковому розряду результату двійкового підсумовування. Для одержання прямого коду, у числовій частині додаткового коду «0» поміняємо на «1», а «1» на «0» і до молодшого розряду додамо «1».
Спр = 1.0010110 + 0.0000001 = 1.0010111 (-2310 ).
Виконаємо С =-А+(-В).
Так, як обоє операнди від’ємні числа то очевидно, що їх необхідно представити у вигляді додаткових кодів.
Aдод =1.0111111 (-65)10
Вдод =1.1010110 (+42)10
-------------------------
Сдод =1.0010101
Перетворимо суму в прямий код
Спр=1.1101010 + 0.0000001 = 1.1101011 ; (-1101011)2 = (-10710)
