Дополнительный десятичный код
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Нужна помощь в составлении кода, который будет вычислять дополнительный десятичный код
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Всё сравнительно просто, если судить по википедии.
Аналогично двоичному дополнительному коду, достаточно знать само число и максимально возможную принятую разрядность. Для вычисления кода нужно в цикле получить одна за одной цифры числа (посредством циклического вычисления остатка от деления на 10), для каждой цифры вычислить разность (9 - цифра), затем сложить получившиеся цифры снова в число и добавить к этому числу единичку.
Аналогично двоичному дополнительному коду, достаточно знать само число и максимально возможную принятую разрядность. Для вычисления кода нужно в цикле получить одна за одной цифры числа (посредством циклического вычисления остатка от деления на 10), для каждой цифры вычислить разность (9 - цифра), затем сложить получившиеся цифры снова в число и добавить к этому числу единичку.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Вручную можно проще: если число отрицательно, то вычесть его модуль из числа, на единицу большего максимально представимого в данной разрядности. Хотя проще - не значит лучше. И проще ли такой алгоритм при программной, или аппаратной реализации? Сомневаюсь. + ещё надо работать с числом большей разрядности, а для неё опять придётся решать ту же задачу и разорвать этот порочный круг можно только длинной арифметикой без фиксированной разрядности. Человек другой арифметикой и не владеет, короткая у него - это на одну цифру, а разрядность определяется не типом, а самим числом, машина же устроена иначе.Romeo писал(а):Всё сравнительно просто, если судить по википедии.
Аналогично двоичному дополнительному коду, достаточно знать разрядность самого число и максимально возможную принятую разрядность. Для вычисления кода нужно в цикле получить одна за одной цифры числа (посредством циклического вычисления остатка от деления на 10), для каждой цифры вычислить разность (9 - цифра), затем сложить получившиеся цифры снова в число и добавить к этому числу единичку.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Аппаратной реализации дополнительного десятичного кода точно нет, так что так будет действительно проще.
И того, если у нас исходное число x, а принятая максимальная разрядность p, то дополнительным десятичным кодом будет число: 10*p - abs(x).
И того, если у нас исходное число x, а принятая максимальная разрядность p, то дополнительным десятичным кодом будет число: 10*p - abs(x).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.