Отрицательное представление чисел в нескольких архитектурах - PullRequest
0 голосов
/ 24 апреля 2010

Я работаю с микроконтроллером OKI 431. Он может связываться с ПК с установленным соответствующим программным обеспечением. EEPROM подключен к шине I2C микро, который работает как постоянная память. Программное обеспечение для ПК может читать и записывать в эту EEPROM.

Рассмотрим два числа, B и C, каждое из которых является двухбайтовым целым числом. B известен как программному обеспечению ПК, так и микро и является константой. C будет числом, настолько близким к B, что B-C поместится в 8-разрядное целое число со знаком. После некоторого тестирования соответствующее значение для C будет определено ПК и сохранено в EEPROM микро для последующего использования.

Теперь микро может хранить C двумя способами:

  • Микро может хранить целые two byte, представляющие C
  • Микро может хранить B-C как one byte целое число со знаком и может впоследствии получить C из B и B-C

Я думаю, что представление отрицательного числа в виде дополнения к двум теперь общепризнанно для производителей оборудования. Тем не менее Мне лично не нравится, когда отрицательные числа хранятся на носителе, к которому будут обращаться две разные архитектуры, потому что отрицательное число может быть представлено по-разному. Для вашей информации, 431 также использует дополнение до двух.

Должен ли я избавиться от головной боли, что отрицательное число может быть представлено различными способами, и принять решение one byte, как предложил мой другой член команды? Или я должен придерживаться решения two byte, потому что мне не нужно иметь дело с отрицательными числами? Какой из них вы бы предпочли и почему?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010

Это очень специфично для вашего приложения, и если я не пропущу что-то, то, похоже, не будет никаких внешних последствий для того или иного действия.
Я предлагаю просто выбрать один и пойти с ним.
Поскольку вы, товарищи по команде, предлагаете один путь, и в действительности нет никакой разницы, переход с командой - не плохое решение.

2 голосов
/ 24 апреля 2010

Древнее приложение FORTRAN, для которого я работал, использовалось для хранения значений для определенных полей в виде целых положительных чисел с подразумеваемым отрицательным смещением. Для хранения чисел было доступно 12 битов, поэтому мы добавили бы 1024 к значению перед его сохранением и вычлили его после извлечения. Это позволило бы нам хранить числа в диапазоне от -1024 до 1023, используя положительное число во (внешней) памяти, в диапазоне от 0 до 2047.

Вряд ли элегантно, но очень просто. По сути, вы выполняете обработку знаковых битов в коде.

...