[an error occurred while processing this directive] [an error occurred while processing this directive]
Чуть пошевелите мозгами..
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Dady 28 ноября 2001 г. 20:00
В ответ на: signed BCD arithmetic for PIC16 (+) отправлено Константин 28 ноября 2001 г. 09:03

Дополнительная десятичная арифметика делается также как и двоичная. Только в двоичной при образовании числа в дополнительном коде берется дополнение до 1 (т.е. основание системы счисления-1) каждого разряда, а в десятичной - дополнение до 9 (т.е. тоже основание системы счисления -1).

Пример 0346-0125=0346+(9874+1)=0221, т.е. 221
Пример2 0346-0415=0346+(9584+1)=9931, т.е. -69 = (9999-9931)+1

Старший разряд здесь играет роль знакового как и в двоичной арифметике

Дополнение до 9 для десятичной цифры числа удобно делать прибавив 0xA к его дополнению до 1 (т.е. к инверсии), а затем ко всему числу (как 10-му) прибавить 1
Чтобы получить модуль числа 9931 (т.е. фактически его дополнительный) нужно сначала инвертировать его двоичное представление, что эквивалентно FFFF-9931=66CE (здесь вычитание двоичное).
Затем к каждой цифре (тетраде) прибавляем 0xA (без переноса в соседнюю тетраду) и получим 0068. Наконец прибавим 1 и получим 69.
Это совершенно аналогично двоичной арифметике. Вспомните, там тоже для получения дополненительного кода числа (дополнение до 2) нужно сначала взять дополнение числа до 1 (т.е. инвертировать его), а затем прибавить к числу 1.

Думаю, что написать программу для PIC или для чего-то там еще Вам теперь не составит труда. Думаю правила определения переполнений сообразите сами, используя ту же аналогию с двоичной арифметикой. Успехов..



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru