Як представляються в комп’ютері числа зі знаком?
Типи даних, якими оперує комп’ютер
В сучасній обчислювальній техніці інформація кодується за допомогою послідовностей сигналів всього двох видів: намагнічено чи не намагнічено, включено чи виключено, висока чи низька напруга і т.д.. Прийнято позначати один стан цифрою нуль, а другий – цифрою 1. Таке кодування називається двійковим [1]. Біт – (англ. bit – binary digit – двійкова цифра) 0 або1.
При двійковому кодуванні текстової інформації кожному символу відповідає його код – послідовність із фіксованої кількості нулів і одиниць. В більшості сучасних ЕОМ кожному символу відповідає послідовність із 8 нулів і одиниць. Байт – це вісім послідовно розміщених бітів, пронумерованих від 0 до 7, при цьому біт 0 є самим молодим значущим бітом. Всього існує 256 різних символів, наприклад великі і малі букви кирилиці і латиниці, цифри, розділові знаки і т.д.. Відповідність байтів і символів задається за допомогою таблиці, в якій для кожного коду вказується відповідний символ.
Слово – послідовність з двох байт, які мають послідовні адреса. Розмір слова 16 біт; біти в слові нумеруються від 0 до 15. Байт, який вміщує нульовий біт, називається молодшим байтом, а байт, який вміщує 15 біт – старшим байтом.
Подвійне слово – послідовність з чотирьох байт (32 біта), які розміщені по послідовним адресам. Нумерація цих бітів проводиться від 0 до 31. Слово, яке вміщує нульовий біт, називається молодшим словом, слово, яке вміщує 31-ий біт – старшим словом.
Так поділяються типи даних з точки зору розмірності. Але комп’ютер може підтримувати логічну інтерпретацію цих типів.
Цілий тип зі знаком – двійкове значення зі знаком, розміром 8, 16 або 32 біта. Знак в цьому двійковому числі розміщується в 7-му, 15-му або 31-му біті, відповідно. Нуль в цих бітах в операндах відповідає додатному числу, а одиниця – від’ємному. Від’ємні числа представляються у додатковому коді. Числові діапазони для цього типу даних наступні:
8-розрядне ціле – від –128 до +127
16-розрядне ціле - від -32768 до +32767
32-розрядне ціле - від -231 до +231-1
Цілий тип без знаку – двійкове значення без знаку, розміром 8, 16 або 32 біта. Числовий діапазон для цього типу наступний
Байт – від 0 до 255
Слово – від 0 до 65535
Подвійне слово – від 0 до 232-1
Додатні цілі зі знаком – це 0 і всі додатні числа. Від’ємні цілі зі знаком – це всі числа менші за 0.
Ознакою числа зі знаком є особливе трактування старшого біта поля, який представляє число. В якості поля можуть виступати байт, слово або подвійне слово. Звичайно, що фізично цей біт нічим не відрізняється від інших – все залежить від команди, яка працює з даним полем. Якщо в її алгоритмі закладена робота з цілими числами зі знаком, то вона буде по особливому трактувати старший біт поля. У випадку, якщо біт рівний нулю, число рахується додатнім і його значення обчислюється по правилам, які ми розглянули вище. У випадку, якщо цей біт рівний 1 – число рахується від’ємним, і передбачається, що воно записано у так званому додатковому коді.
Додатковий код деякого від’ємного числа представляє собою результат інвертування (заміни 1 на 0 і навпаки) кожного біта двійкового числа, рівного модулю початкового від’ємного числа плюс одиниця. Наприклад, розглянемо десяткове число мінус 185. Модуль цього числа в двійковому вигляді рівний 10111001. Спочатку потрібно доповнити це значення зліва нулями до потрібного розміру – байта, слова і т.д.. У нашому випадку доповнити треба до слова, так як діапазон представлення знакових чисел в байті складає мінус128...+127.Наступна дія – отримати двійкове доповнення. Для цього всі розряди двійкового числа треба інвертувати:
0000 0000 1011 1001→1111 1111 0100 0110
Тепер додаємо одиницю:
1111 1111 0100 0110 + 0000 0000 0000 0001 = 1111 1111 0100 0111
Саме так представляється число мінус 185 в комп’ютері. При роботі з числами зі знаком від вас напевно буде необхідно вміння виконувати зворотні дії – маючи двійкове доповнення числа, визначити значення його модуля. Для цього необхідно виконати дві дії:
– виконати інвертування бітів двійкового доповнення.
– до отриманого двійкового числа додати двійкову одиницю.
Для прикладу, визначити модуль двійкового представлення числа мінус185 = 1111 1111 0100 0111:
1111 1111 0100 0111→інвертуємо біти→0000 0000 1011 1000
Додаємо двійкову одиницю:
0000 0000 1011 1000 + 0000 0000 0000 0001 = 0000 0000 1011 1001 = |-185|
Оскільки в двійковій системі використовуються два символи, вона має основу 2. При розгляді числової послідовності в двійковій системі (див.табл.1.1) бачимо, що вона має таке ж схематичне вираження, як і в десятковій системі. Отже, можна використовувати ті ж арифметичні операції, що і в десятковій системі числення. Правила виконання арифметичних операцій приведені в таблиці 1.2
Таблиця 1.2 - Основні арифметичні операції у двійковій системі числення
| Двійкове додавання | |||||
| Доданки | Сума | Перенос | |||
| + | = | ||||
| + | = | ||||
| + | = | ||||
| + | = |
| Двійкове віднімання | |||||||
| Зменшуване | Від’ємник | Різниця | Позика | ||||
| - | = | ||||||
| - | = | ||||||
| - | = | ||||||
| - | = | ||||||
| Двійкове множення | ||||
| Множник | Множник | Добуток | ||
| ´ | = | |||
| ´ | = | |||
| ´ | = | |||
| ´ | = |
| Двійкове ділення | ||||
| Ділене | Дільник | Частка | ||
| : | = | - | ||
| : | = | |||
| : | = | - | ||
| : | = |
Додавання і віднімання, множення і ділення двійкових чисел виконується так само, як і в інших позиційних системах числення, наприклад десятковій. Точно так само виконується зичення і перенос із старшого розряду (або в старший розряд) (табл.1.3). Віднімання в двійковій системі зручно проводити також шляхом сумування з використанням додаткового коду (табл.1.4).
Таблиця 1.3 - Приклади основних арифметичних операцій у двійковій системі числення.
| Додавання | ||||||||||
| перенос | ||||||||||
| доданок | + | |||||||||
| доданок | ||||||||||
| сума |
| Віднімання | ||||||||||||
| позика | ||||||||||||
| зменшуване | - | |||||||||||
| від’ємник | ||||||||||||
| різниця |
| Множення | ||||||||
| множник | ´ | |||||||
| множник | ||||||||
| добуток |
Ділення
| Ділене | Дільник | |||||||||||||||
| , | , | |||||||||||||||
| , | Частка | |||||||||||||||
| залишок |
Віднімання з додатковим кодом (1011 – 0101):
Інвертуємо число 0101 ® 1010
Додаємо до 1011 інвертоване число
Таблиця 1.4 - Приклад віднімання з додатковим кодом у двійковій системі числення.
| Перенос | |||||
| Доданок | + | ||||
| Доданок | |||||
| Сума | |||||
| Циклічний перенос | ¯ | ® | ® | ® | |
| Шукана різниця |
Таблиця 1.5 - Степені двійки
| k | 2k |