Додатковий код (подання числа)

Додатковий код для десяткових чисел

Той же принцип можна використовувати і в комп'ютерному поданні десяткових чисел: для кожного розряду цифра X замінюється на 9-X, і до одержали числа додається 1. Наприклад, при використанні чотиризначних чисел -0081 замінюється на 9919 (9919 + 0081 = 0000, п'ятий розряд викидається).

При застосуванні тієї ж ідеї до звичної 10-тичний системі числення вийде (наприклад, для гіпотетичного процесора, який використовує 10-тичного систему числення):

10-тичная система числення
( "Звичайна" запис)

10-тичная система числення,
додатковий код

Перетворення в додатковий код

Перетворення числа з прямого коду в додатковий здійснюється за наступним алгоритмом.

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

Приклад. Перетворимо негативне число -5, записане в прямому коді, в додатковий код. Прямий код негативного числа -5:

Інвертуємо все розряди числа, крім знакового, отримуючи таким чином зворотний код (перше доповнення) від'ємного числа -5:

Додамо до результату 1, отримуючи таким чином додатковий код (друге доповнення) від'ємного числа -5:

Для перетворення негативного числа -5, записаного в додатковому коді, в позитивне число 5, записане в прямому коді, використовується схожий алгоритм. А саме:

Інвертуємо все розряди негативного числа -5, отримуючи таким чином позитивне число 4 в прямому коді:

Додавши до результату 1 отримаємо позитивне число 5 в прямому коді:

І перевіримо, склавши з додатковим кодом

В системі p -адіческіх чисел зміна знака числа здійснюється перетворенням числа в його додатковий код. Наприклад, якщо використовується 5-річної системі числення, то число, протилежне 00015 (110), так само 44445 (-110).

Реалізація алгоритму перетворення в додатковий код (для 8-бітних чисел)

Переваги і недоліки

переваги

  • Загальні інструкції (процесора) для додавання, віднімання і лівого зсуву для знакових і беззнакових чисел (відмінності тільки в арифметичних прапорах, які потрібно перевіряти для контролю переповнення в результаті).
  • Відсутність числа «мінус нуль».

недоліки

  • Подання негативного числа не читається за звичайними правилами, для його сприйняття потрібен особливий навик або обчислення
  • У деяких виставах (наприклад, двійковій-десятковий код) або їх складові частини (наприклад, мантиса числа з плаваючою комою) додаткове кодування незручно
  • Модуль найбільшого цифри не дорівнює модулю найменшого числа. Наприклад, для восьмібітного цілого зі знаком, максимальне число: 12710 = 011111112. мінімальне число: -12810 = 100000002. Відповідно, не для будь-якого числа існує протилежне. Операція зміни знаку може вимагати додаткової перевірки.

Приклад програмного перетворення

Якщо відбувається читання даних з файлу або області пам'яті, де вони зберігаються в двійковому додатковому коді (наприклад, файл WAVE), може виявитися необхідним перетворити байти. Якщо дані зберігаються в 8 бітах, необхідно, щоб значення 128-255 були негативними.

C # .NET / C style

Розширення знака (англ. Sign extension) - операція над двійковим числом, яка дозволяє збільшити розрядність числа зі збереженням знака і значення. Виконується додаванням цифр з боку старшого значущого розряду. Якщо число позитивне (старший розряд дорівнює 0), то додаються нулі, якщо негативне (старший розряд дорівнює 1) - одиниці.

Схожі статті