Додатковий код для десяткових чисел
Той же принцип можна використовувати і в комп'ютерному поданні десяткових чисел: для кожного розряду цифра X замінюється на 9-X, і до одержали числа додається 1. Наприклад, при використанні чотиризначних чисел -0081 замінюється на 9919 (9919 + 0081 = 0000, п'ятий розряд викидається).
При застосуванні тієї ж ідеї до звичної 10-тичний системі числення вийде (наприклад, для гіпотетичного процесора, який використовує 10-тичного систему числення):
10-тичная система числення
( "Звичайна" запис)
10-тичная система числення,
додатковий код
Перетворення в додатковий код
Перетворення числа з прямого коду в додатковий здійснюється за наступним алгоритмом.
- Якщо старший (знаковий) розряд числа, записаного в прямому коді, дорівнює 0, то число позитивне і ніяких перетворень не робиться;
- Якщо старший (знаковий) розряд числа, записаного в прямому коді, дорівнює 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) - одиниці.