Прямий код
Прямий код — спосіб подання двійкових чисел із нерухомою комою в комп'ютерній арифметиці. Переважно використовують для запису невід'ємних чисел. У разі використання прямого коду для чисел як додатних, так і від'ємних, тобто чисел, запис яких передбачає можливість використання знака мінус (знакових чисел), цифрові розряди числа, що зберігаються, доповнюють знаковим розрядом.
У записі числа в прямому коді старший розряд (старший біт) оголошують знаковим розрядом (знаковим бітом). Якщо знаковий біт дорівнює 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 с.
![]() | Ця стаття містить перелік посилань, але походження тверджень у ній залишається незрозумілим через практично повну відсутність внутрішньотекстових джерел-виносок. |