Як представляються в комп’ютері числа зі знаком?

Типи даних, якими оперує комп’ютер

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