COMP-3 на языке COBOL
В COBOL программисту разрешено задавать внутреннюю форму элементов записей, что позволяет облегчить ее использование максимально эффективным образом. ВЫЧИСЛЕНИЕ и ДИСПЛЕЙ — две основные формы внутреннего представления. Он используется для хранения и сжатия пространства для хранения.
- ИСПОЛЬЗОВАНИЕ ВЫЧИСЛЕНИЙ — сохранение двоичного значения
- ДИСПЛЕЙ – Сохранить десятичное значение
Как данные хранятся:
Тип данных Binary Coded Decimal (BCD) точно такой же, как и его имя, это значение, хранящееся в десятичном формате, и каждая цифра закодирована в двоичном формате. Поскольку цифра имеет только десять возможных значений (0-9), ее можно представить только в двоичной форме с помощью 4 бит. Четыре бита называются «полубайтами», и каждый полубайт содержит одну цифру значения. Следовательно, вы можете получить две цифры в каждом 8-битном байте.
Значение в COMP-3 сохраняется в порядке от старшего к младшему. старший полубайт первого байта, встречающегося в документе, является старшей цифрой значения, младший полубайт байта — следующей цифрой и так далее. последний кусок, младший кусок наименьшего огромного байта. Шестнадцатеричный «C» положительный, шестнадцатеричный «D» отрицательный, а шестнадцатеричный «F» беззнаковый.
Поля Comp-3 выравниваются по границам байтов, и поле всегда представляет собой целое число байтов. Символ полубайта всегда является младшим полубайтом LSD (наименее значащая цифра). Так как знак занимает один полубайт и поскольку в любом количестве байтов всегда есть четное количество полубайтов, нечетное количество цифр полностью заполнит поле comp-3. (Нечетное количество цифр плюс знак полубайта дает четное количество полубайтов или полностью заполненных байтов). Если размер поля указан как четное количество цифр, как в «PIC S9(6) comp-3.», старший полубайт игнорируется и обычно, но не всегда, устанавливается равным нулю.
Пример 1:
Cobol
COBOL program for COMP - 3 IDENTIFICATION DIVISION . PROGRAM - ID . Comp3-Code. ENVIRONMENT DIVISION . DATA DIVISION . WORKING-STORAGE SECTION . 77 WS-VALA USAGE IS COMP - 1 . 77 WS-VALB USAGE IS COMP - 2 . 77 WS-VALC PIC S9( 3 ) USAGE IS COMP - 3 . 77 WS-VALD PIC S9( 4 ) USAGE IS COMP - 3 . PROCEDURE DIVISION . MAIN-PARA. DISPLAY "***COMP-1 USAGE DISPLAY***" . MOVE 999 TO WS-VALA. DISPLAY "VALUE OF WS-VALA IS: " WS-VALA. DISPLAY "LENGHTH OF WS-VALA IS: " LENGTH OF WS-VALA. DISPLAY "***COMP-2 USAGE DISPLAY***" . MOVE 999 TO WS-VALB. DISPLAY "VALUE OF WS-VALB IS: " WS-VALB. DISPLAY "LENGHTH OF WS-VALB IS: " LENGTH OF WS-VALB. DISPLAY "***COMP-3 USAGE USING 2 BYTES DISPLAY***" . MOVE 999 TO WS-VALC. DISPLAY "VALUE OF WS-VALC IS: " WS-VALC. DISPLAY "LENGHTH OF WS-VALC IS: " LENGTH OF WS-VALC. DISPLAY "***COMP-3 USAGE USING 3 BYTES DISPLAY***" . MOVE 999 TO WS-VALD. DISPLAY "VALUE OF WS-VALD IS: " WS-VALD. DISPLAY "LENGHTH OF WS-VALD IS: " LENGTH OF WS-VALD. STOP RUN . |
Выход:
Объяснение:
- Для упакованного комп-3 поле указывает количество цифр после распаковки. Фактическое количество байтов, занятых в файле, составляет около половины этих байтов.
Чтобы вычислить количество байтов, мы должны добавить 1 (для знака) к общему количеству цифр, затем нужно разделить его на 2 и округлить. - Здесь, в нашем примере, мы рассматриваем переменную с именами WS-VALC и WS-VALD.
- Для WS-VALC PIC S9(3) ИСПОЛЬЗОВАНИЕ COMP-3, поэтому здесь мы можем принять его как (3+1)/2, что равно размеру 2 байта.
- Точно так же в 3-байтовой переменной WS-VALD PIC S9(4) USAGE IS COMP-3, поэтому здесь мы можем принять ее как (4+1)/2, что равно 2,5 (округлено), поэтому потребуется 3 байта. .