Як представляються в комп’ютері числа зі знаком?
Типи даних, якими оперує комп’ютер
В сучасній обчислювальній техніці інформація кодується за допомогою послідовностей сигналів всього двох видів: намагнічено чи не намагнічено, включено чи виключено, висока чи низька напруга і т.д.. Прийнято позначати один стан цифрою нуль, а другий – цифрою 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 |