COMP-3 на языке COBOL

Опубликовано: 10 Января, 2023

В 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(3USAGE IS COMP-3.
        77 WS-VALD  PIC S9(4USAGE 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 байта. .