Прямий код

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Прямий код — спосіб подання двійкових чисел із нерухомою комою в комп'ютерній арифметиці. Переважно використовують для запису невід'ємних чисел. У разі використання прямого коду для чисел як додатних, так і від'ємних, тобто чисел, запис яких передбачає можливість використання знака мінус (знакових чисел), цифрові розряди числа, що зберігаються, доповнюють знаковим розрядом.

Подання числа зі знаком у прямому коді[ред. | ред. код]

У записі числа в прямому коді старший розряд (старший біт) оголошують знаковим розрядом (знаковим бітом). Якщо знаковий біт дорівнює 0, число додатне, інакше — від'ємне. В інших розрядах (які називають цифровими розрядами) записується двійкове подання модуля числа.

Функція кодування двійкових чисел (зокрема, цілих чисел та мішаних дробів) у прямому коді має вигляд:

де  — номер знакового розряду (знакового біта). Зокрема, при кодуванні правильних двійкових дробів (тобто чисел, які задовольняють нерівність ), і функція кодування набуває вигляду:

Величину числа у прямому коді визначають за такою формулою:

де:

  •  — номер розряду числа; від'ємне число — номер розряду праворуч від коми; додатне число — номер розряду ліворуч від коми;
  •  — кількість розрядів праворуч від коми (кількість розрядів дробової частини числа);
  •  — кількість розрядів ліворуч від коми (кількість розрядів цілої частини числа);
  •  — цифра в -му розряді;
  •  — основа системи числення; дорівнює 2 для двійкових чисел, 10 — для десяткових, 16 — для шістнадцяткових тощо;
  •  — значення знакового розряду (знакового біта);
  •  — число, що має розрядів праворуч від коми (дробова частина) та розрядів ліворуч (ціла частина); враховуються лише цифрові розряди.

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

Приклади[ред. | ред. код]

Десяткове число Двійкове число Код прямий двійковий 8-розрядний Примітка
0 0 0000 0000 Додатний нуль
-0 -0 1000 0000 Від'ємний нуль
5 101 0000 0101
10 1010 0000 1010
-5 -101 1000 0101
-16 -10000 1001 0000
9/16 0.1001 0.100 1000
-9/16 -0.1001 1.100 1000
105/128 0.1101001 0.110 1001
-5/128 -0.0000101 1.000 0101

Застосування прямого коду[ред. | ред. код]

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

Однак, за використання для чисел зі знаком прямий код має два недоліки:

  • у ньому є два варіанти запису числа 0 (наприклад, 00000000 та 10000000 у восьмирозрядному поданні). Друге подання називають «від'ємний нуль»;
  • використання прямого коду для подання в пам'яті комп'ютера від'ємних чисел передбачає або виконання арифметичних операцій центральним процесором у прямому коді, або переведення чисел в інше подання (наприклад, доповняльний код) перед виконанням операцій та переведення результатів назад у прямий код (що неефективно).

Виконання арифметичних операцій над числами у прямому коді утруднене: наприклад, навіть для додавання чисел із різними знаками потрібно, крім суматора, мати спеціальний блок-віднімач, складність реалізації якого така ж, як і звичайного суматора. Крім того, при виконанні арифметичних операцій потрібно окремо опрацьовувати знаковий розряд, оскільки він не має ваги. Також потрібна обробка «від'ємного нуля». Таким чином, виконання арифметичних операцій над знаковими числами в прямому коді вимагатиме складнішої архітектури центрального процесора і загалом є неефективним.

Значно зручнішим для виконання арифметичних операцій є доповняльний код.

Діапазон[ред. | ред. код]

-розрядний прямий код ( цифрових розрядів та один знаковий) дозволяє подавати:

  • цілі числа в діапазоні ;
  • правильні двійкові дроби в діапазоні .

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

Література[ред. | ред. код]

  • Behrooz Parhami. 2.1. Signed-Magnitude Representation // Computer Arithmetic: Algorithms and Hardware Designs. — New York : Oxford University Press, 2000. — P. 19—21. — ISBN 0-19-512583-5.
  • Самофалов К.Г., Романкевич А.М., Валуйский В.Н., Каневский Ю.С., Пиневич М.М. Прикладная теория цифровых автоматов. — К. : Вища школа, 1987. — 375 с.