Главная » Delphi » Представление чисел в формате BCD

0

Электронные устройства "заточены" под использование двоичных и родственных им систем счисления, потому что основой являются два состояния, т. е. двоичная цифра. Так что, соединив несколько устройств вместе с целью оперирования многоразрядными числами, мы всегда будем получать именно двоичное число. При этом четыре двоичных разряда могут представлять шестнадцать различных состояний, и использовать их для представления десятичных чисел было бы попросту не экономично-, часть возможного диапазона осталась бы неиспользованной. Подсчитайте сами: для представления числа с шестью десятичными разрядами в десятичном виде нужно 6 ? 4 = 24 двоичных разряда, а для представления тою же числа в двоичном виде с избытком хватит 20 разрядов (2"° = 1 048 576). Л меньше, чем четыре двоичных разряда, для представления одного десятичного числа не хватит (23 = 8). К тому же с чисто двоичными числами, как мы увидим в дальнейшем, оперировать значительно проще. И все же применять двоично-десятичный формат приходится всегда, когда речь идет о выводе чисел, например, на цифровой дисплей. Поэтому приходится преобразовывать шестнадцатиричные числа в десятичные и хранить их в таких же байтовых регистрах или ячейках памяти. Это можно делать двумя путями: в виде упакованного и неупакованного BCD. Неупакованный формат nonpociy означает-, что мы тратим на каждую десятичную цифру не тетраду, как необходимо, а целый байт. Зато при этом не возникает разночтений: ()5h = 05щ и никаких проблем. Однако ясно, что это крайне не экономично — байтов требуется в два раза больше, а старший полубайт при этом все равно всегда ноль. Потому BCD-числа всегда упаковывают, занимая и старший разряд второй десятичной цифрой: скажем, число 59 при этом запишется как просто 59. Однако это не 59Ы 59 в шестнадцате- ричной форме есть 3Bh, как мы установили ранее, а наше 59 процессор прочтет, как 5-16 + 9 = 89, что вообще ни в какие порога не лезет! Поэтому перед проведением операций с упакованными BCD-числами их обязательно распаковывают, перемещая старший разряд в отдельный байт, и заменяя в обоих байтах старшие полубайты нулями. Иногда для проведения операций с BCD в микропроцессоре или микроконтроллере предусмотрены специальные команды, так что отдельно заниматься упаковкой-распаковкой не требуется. В качестве примера хранения чисел в BCD-формате можно привести значения часов, ми ну г и секунд в энергонезависимых часах компьютера.

Источник: Ревнч Ю. В.  Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

По теме:

  • Комментарии