IMath Wiki - Особливості представлення інформації в комп’ютері

У сучасній обчислювальній техніці вся інформація зберігається на інформаційних носіях, що мають “комірки”, які можуть бути у двох стійких станах. Це стосується і жорстких дисків, і динамічної пам'яті, і flash-накопичувачів.

Цим та деякими історичними причинами обумовлений той факт, що вся інформація в комп'ютерах зберігається у вигляді двійкового коду – деякого уявлення у вигляді “нулів” та “одиниць”.

Важливість розуміння систем числення обумовлена ​​насамперед використанням двійкової системи числення для представлення інформації.

Як мовилося раніше, сучасні запам'ятовуючі пристрої мають “комірки”, які можуть у двох стійких станах. Такі осередки називатимемо розрядами. У зв'язку з суто фізичними обмеженнями, під зберігання інформації відводиться кінцеве число розрядів.

Групи розрядів фіксованого розміру називаються регістрами.

Забігаючи вперед, скажу, що двійковий розряд зберігає кількість інформації, яка називається біт (відbi nary digit ). Регістр, що складається з \(n\) осередків називається \(n\)-бітним. Так, регістр із 8 осередків називається восьмибітним, з 16 – шістнадцятибітним тощо.

Далі ми розглянемо, як у пам'яті комп'ютера подається різна типова інформація, така як цілі та дробові числа, а також текст.

Подання цілих чисел

Існують різні способи зберігання цілих чисел. Вони відрізняються кількістю розрядів, що відводяться, і можливістю подання негативних чисел.

Для позначення кількості розрядів, що відводяться під ціле, будемо користуватися введеною вищетермінологією бітності. Так, якщо відводиться 8 розрядів, говоритимемо про восьмибітні цілі, і т.п.

Для будь-якої бітності, існують принаймні два способи уявлення числа: не допускає негативні числа, і допускає. Перше називатимемо беззнаковим, а друге знаковим.

Так, наприклад, можна говорити про беззнакове восьмибітне ціле уявлення.

Беззнакова вистава

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

Самі числа видаються у пам'яті аналогічно двійковим числам. Один із станів розряду вважається еквівалентним нулю, інший – одиниці. Тоді послідовно записане в двійковій системі ціле число явно транслюється на стан регістра.

Поданням числа \(1234_ = 10011010010_2\) буде наступний набір розрядів:

Оскільки кількість розрядів у регістрі обмежена, існують також обмеження на максимально представимо число. Мінімально представимо число для беззнакового уявлення - завжди 0.

Так, наприклад, у 8 розрядах максимально представне число \(11111111_2 = FF_ = 255_\)

Загальна формула для максимально представленого числа в \(n\) розрядах (I_ = 2^ - 1\)

Деякі поширені приклади:

Існує спосіб перевірити розмірність основних цілих типів. Приклад програми для перевірки бітності:

Стандартним способом перевірки максимального значення C++ є шаблонна структура std:: numeric_limits , визначена в заголовку . Приклад перевірки максимального значення основних цілих типів:

Одним із важливих наслідків подання числа в кінцевому числі розрядів є те, що при спробі поданнячисла найбільш максимально уявного відбувається ціле переповнення і старші розряди безповоротно втрачаються. Одне з ключових наслідків полягає в тому, що в (n) розрядах число (2 ^ n) представляється так само, як (0). На основі цієї властивості будується уявлення негативних чисел.

Знакова вистава

У знаковому уявленні старший розряд відводиться під позначення "знака". У принципі, на цьому можна було б зупинитися і представляти негативні числа у вигляді знакового розряду та модуля. Однак, це спричинило б конструктивне ускладнення арифметичних пристроїв, що небажано з низки причин. Натомість, негативні числа подаються у вигляді додаткового коду.

Додаткові до чого? Виявляється, додаткового до \(0\), або, як було сказано вище, в \(n\) розрядах - до \(2^n\).

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

Побудова додаткового коду 2

  1. У \(n\)-бітному поданні записується модуль числа – це називається прямим кодом
  2. Усі розряди інвертуються (там, де було 1 ставиться 0, і навпаки) – це називається зворотним кодом.
  3. До отриманого подання за правилами двійкової арифметики додається 1.

Побудуємо додатковий код числа \(-11\) у 8-бітному знаковому поданні. \ (11 = 0000 \, 1011_2 \). Зворотній код (11110100_2) . Додаючи 1, отримуємо додатковий код: \(11110101_2\).

Для позитивних чисел вважається, що додатковий код збігається із прямим.

Якщо побудувати додатковий код з додаткового коду,знову виходить прямою.

Отже, якщо старший (“лівий”) розряд дорівнює 1, то знаковому поданні число інтерпретується як негативне.

Покажемо, що основна арифметична тотожність виконується:

\ (11 - 11 = 0 \). Розглянемо уявлення у 8 розрядах.