СРС2 > Основи машинної арифметики з двійковими числами

Тема: Виконання арифметичних дій з двійковими числами. Коди чисел. Прямий, зворотній і додатковий коди. Особливості складання чисел у зворотному та додатковому кодах. Модифіковані коди.

Теорія

1. Коди чисел

У ЕОМ з метою спрощення виконання арифметичних операцій застосовують спеціальні коди для подання чисел. Використання кодів дозволяє звести операцію віднімання чисел до арифметичного додавання кодів цих чисел. Застосовуються прямий, зворотний і додатковий коди чисел. Прямий код використовується для представлення негативних чисел в запам’ятовуючому пристрої ЕОМ, а також при множенні і діленні. Зворотний і додатковий коди використовуються для заміни операції віднімання операцією додавання, що спрощує будову арифметичного блоку ЕОМ. До кодів висуваються наступні вимоги:

1) Розряди числа в коді жорстко зв’язані с певною розрядною сіткою.

2) Для запису коду знаку в розрядній сітці відводиться фіксований, строго визначений розряд.

Наприклад, якщо за основу представлення коду взято один байт, то для представлення числа буде відведено 7 розрядів, а для записи коду знаку один розряд.

Прямий код. Прямий код двійкового числа співпадає по зображенню із записом самого числа. Значення знакового розряду для позитивних чисел дорівнює 0, а для від’ємних чисел 1.

Знаковим розрядом звичайно є крайній розряд в розрядній сітці. Надалі при записі коду знаковий розряд від цифрових домовимося відокремлювати комою. Якщо кількість розрядів коду не зазначено будемо припускати, що під запис коду виділено один байт.

Приклад. У випадку, коли для запису коду виділений один байт, для числа +1101 прямий код 0,0001101, для числа -1101 прямий код 1,0001101.

Зворотний код. Зворотний код для невід’ємного числа збігається з прямим кодом. Для від’ємного числа всі цифри числа замінюються на протилежні (1 на 0, 0 на 1), а в знаковий розряд заноситься одиниця.

Приклад.

Для числа +1101 прямий код 0,0001101; зворотний код 0,0001101. Для числа -1101 прямий код 1,0001101; Зворотний код 1,1110010.

Додатковий код. Додатковий код невід’ємного числа збігається з прямим кодом. Для від’ємного числа додатковий код утворюється шляхом отримання зворотного коду і додаванням до молодшого розряду одиниці.

Приклад.

Для числа +1101:

Прямий код Зворотний код Додатковий код
0,0001101  0,0001101  0,0001101 

 

 

Для числа -1101:

Прямий код Зворотний код Додатковий код
1,0001101  1,1110010  1,1110011  

 

 

 

2. Особливості складання чисел у зворотному та додатковому кодах

При додаванні чисел в додатковому коді, одиниця переносу, що виникла, в знаковому розряді відкидається.

При додаванні чисел у зворотному коді одиниця переносу, що виникла, в знаковому розряді додається до молодшого розряду суми кодів.

Якщо результат арифметичних дій є кодом від’ємного числа, необхідно перетворити його в прямий код. При цьому зворотний код перетворюється в прямий заміною цифр у всіх розрядах, крім знакового на протилежні. Додатковий код перетворюється в прямий також, як і зворотний, з подальшим додаванням одиниці до молодшого розряду.

Приклад

Скласти двійкові числа X й Y в зворотному та додатковому кодах.

а) X= 111, Y= -11;

1) Складемо числа, користуючись правилами двійкової арифметики:

    

2) Складемо числа, використовуючи коди:

Прямий код Складання в зворотномукоді Складання в додатковому коді

 

 

Так як результат додавання являється кодом додатного числа (знак 0), то (X+Y)звор=(X+Y)дод=(X+Y)пр.

б) X= -101,Y= -11;

1) Складемо числа, користуючись правилами двійкової арифметики:

    

2) Складемо числа, використовуючи коди:

Прямий код Додавання в зворотномукоді Додавання в додатковому коді

 

 

Так як сума являється кодом від’ємного числа (знак 1), то необхідно перевести результати в прямий код: – з зворотного коду (X+Y)звор=1,1110100 (X+Y)пр=1,0001011; – з додаткового коду (X+Y)дод=1,1110101 (X+Y)пр=1,0001010+0,0000001=1,0001011. Таким чином, X+Y= -1011 й отриманий результат співпадає з звичайним записом.

3. Модифіковані зворотний й додатковий коди

При переповненні розрядної сітки, відбувається перенесення одиниці в знаковий розряд. Це призводить до неправильного результату, при чому додатне число, що вийшло в результаті арифметичної операції може сприйматися як від’ємне (тому що у знаковому розряді “1”) і навпаки.

Наприклад: 

Тут X і Y – коди додатних чисел, але ЕОМ сприймає результат їх складання як код від’ємного числа (“1” в знаковому розряді). Для виявлення переповнення розрядної сітки вводяться модифіковані коди.

У модифікованому зворотному і модифікованому додатковому кодах під знак числа відводиться не один, а два розряди: “00” відповідає знаку “+”, “11” – знаку “-“. Будь-яка інша комбінація (“01” або “10”), що вийшла в знакових розрядах слугує ознакою переповнення розрядної сітки. Додавання чисел в модифікованих кодах нічим не відрізняється від складання в звичайних зворотному і додатковому кодах.

Розглянемо попередній приклад, виконавши додавання в модифікованому зворотному коді:

    

Комбінація “01” в знакових розрядах значить, що відбулося переповнення і отриманий результат – невірний.

Розглянемо ще один приклад. Приклад. Дані два числа: X=101001 й Y= -11010. Скласти їх в модифікованому додатковому коді.

1) Переведемо X та Y в модифікований додатковий код:

Звичайний запис Модифікованийзворотний

код 

Модифікований додатковийкод 
X= +101001 

Y= -011010 

 

2) Виконаємо складання:

    

Переповнення немає (в знакових розрядах “00”), тому отриманий результат – вірний (X+Y=1111)

 

Варіанти завдань

I) Записати число в прямому, зворотному й додатковому кодах:

1) -11101; 2) -101001; 3) -1001110; 4) 110010; 5) -101101; 6) -1011001; 7) -1001010;

8) 110100; 9) -110101; 10) 11010; 11) -110101; 12) -1010001; 13) -1011110; 14) 111010;

15) -1011101; 16) -1011011; 17) -1101010; 18) 1101010; 19) -1010101; 20) -11010; 21) -111001; 22) -1011001; 23) -1001111; 24) 110110; 25) -1010101.

II) Перевести X та Y в прямий, зворотний і додатковий коди. Скласти їх в зворотному і додатковому кодах. Результат перевести в прямий код. Перевірити отриманий результат, користуючись правилами двійкової арифметики.

1) X= -11101;    Y= -100110;  2) X= 1110100;    Y= -101101;  3) X= -10110;    Y= -111011; 
4) X= 1111011;    Y= -1001010;  5) X= -11011;    Y= -10101; 6) X= -10100;    Y= -110011; 
7) X= 1101011;    Y= -1011010;  8) X= -11001;    Y= -10111;  9) X= -10100;    Y= 1001101; 
10) X= -101010;    Y= 1001111;  11) X= -101101;    Y= -100110;  12) X= 1110101;    Y= -101101; 
13) X= -11110;    Y= -111011;  14) X= 1111011;    Y= -1001011;  15) X= -110101;    Y= -10101.
16) X= -10101;    Y= -110011;  17) X= 1001011;    Y= -1011010;  18) X= -11001;    Y= -10101; 
19) X= -10101;    Y= 1000101;  20) X= -101010;    Y= 1001011;  21) X= -101001;    Y= -100110; 
22) X= 1010101;    Y= -101101; 23) X= -10110;    Y= -111011;  24) X= 1011011;    Y= -1001111; 
25) X= -111101;    Y= -10101.     

III) Складіть X і Y в модифікованому зворотному і модифікованому додатковому восьмирозрядних кодах. У разі появи ознаки переповнення збільшити число розрядів в кодах і повторити підсумовування. Результат перевести в прямий код і перевірити, користуючись правилами двійковій арифметики.

1) X= 11110;    Y= -111001;  2) X= -11010;    Y= -100111;  3) X= -11001;    Y=-100011; 
4) X= -10101;    Y= 111010; 5) X= -1101;    Y= -111011.  6) X= 10100;    Y= 111101; 
7) X= 10110;    Y= -111011;  8) X= -11110;    Y= -100101;  9) X= -10001;    Y=-101011; 
10) X= 110110;    Y= 110101;  11) X= 11110;    Y= -111011;  12) X= -11010;    Y= -100101; 
13) X= -110001;    Y=-100011;  14) X= -10101;    Y= 111000;  15) X= -1101;    Y= -110011. 
16) X= 101100;    Y= 111101;  17) X= 10110;    Y= -111001;  18) X= -11010;    Y= -100101; 
19) X= -10011;    Y=-101011;  20) X= 100110;    Y= 110101;  21) X= 11110;    Y= -101011; 
22) X= -11011;    Y= -100101;  23) X= -110001;    Y=-101011;  24) X= -10101;    Y= 111001; 
25) X= -1101;    Y= -110011.     

Будь-яка інформація (числа, команди, записи і т. п.) представляється в ЕОМ у вигляді двійкових кодів фіксованої або змінної довжини. Окремі елементи двійкового коду, що мають значення 0 або 1, називають розрядами або бітами. Двійковий код, що складається з 8 розрядів носить назву байта. Для запису чисел також використовують 32-розрядний формат (машинне слово), 16-розрядний формат (півслова) і 64-розрядний формат (подвійне слово).