Типы данных COBOL

У меня есть путаница в отношении типов данных COBOL. Как и во многих интервью, его просят объяснить разницу между COMP-3 и COMP... в чем разница? в чем смысл режимов использования в COBOL и как это связано с типами данных?

спасибо и с уважением, Manasi Kulkarni

4 ответов


USAGE в COBOL описывается, как должен использоваться элемент данных. Несколько примеров использования являются:

  • дисплей. Это определяет элемент, который может быть напечатан на терминале или доклад. Это может быть или не быть число (например, может быть текстовое значение). Этот описание элемента отображения задается предложением PICture. Например: PIC 9(5) USAGE DISPLAY описывает 5-значный номер, который может отображаться (печататься). Часто USAGE DISPLAY остается, потому что это подразумевается, если отсутствует.
  • . Это определяет элемент, используемый в качестве индекса в таблице (происходит).
  • COMPsomething указывает, что элемент данных должен использоваться в арифметические операции (т. е. это число некоторого типа).

существуют различные типы числовых элементов. Два из наиболее часто используемых числовые типы данных:

  • вычислительный или COMP. Это эквивалентно BINARY
  • вычислительный-3 или COMP-3. Это эквивалентно PACKED-DECIMAL

COMP (двоичные) элементы данных, как правило, являются наиболее эффективным способом выполнения вычисления для элементов данных, представляющих целочисленные значения.

элементы данных COMP-3 (PACKED-DECIMAL) используются в COBOL, потому что они поддерживают фиксированное число десятичных знаков. Все вычисления приведите к результату, имеющему заданное количество десятичных знаков. Это особенно полезно в операциях бухгалтерского типа. Числа с плавающей запятой число знаков после этот десятичная переменная (например, десятичная точка может "плавать"), которая не так, как обычно представляют финансовые операции.

вы можете найти полный список вычислительных элементов для IBM Enterprise COBOL здесь

одна из проблем, с которой сталкиваются многие программисты, начиная с COBOL понимание того, что элемент COMP отлично подходит для выполнения математики, но не может быть отображается (печатается) до тех пор, пока он не будет преобразован в отображаемый элемент через заявление о движении. При перемещении элемента COMP в отчет или экран он представит не очень хорошо. Его нужно переместить на дисплей пункт первый.

другая вещь, которую вы, возможно, захотите исследовать немного больше связь между изображением и использованием при определении переменных в Коболе. Вот ссылка на очень хороший вводный COBOL учебник из Лимерикского университета.


COBOL действительно имеет только два типа данных: числа и строки.

расположение каждого поля в записи COBOL точно определяется PICTURE (сокращенно PIC предложения). Наиболее распространенными из них являются:

  • PIC X для строк. PIC X(100) означает 100-байтовую строку.
  • PIC 9 для чисел, по желанию с S (знак) или V (неявные запятой). Например, PIC S9(7)V99 означает подписанное число с 7 цифрами для слева от неявной десятичной точки и 2 знака вправо.

числовые поля могут иметь USAGE предложение для оптимизации их хранения. Самый распространенный USAGEС DISPLAY, COMP и COMP-3.

DISPLAY сохраняет каждую цифру как символ. Например, PIC 9(4) VALUE 123 сохраняет номер, как если бы это была строка "0123". И PIC 9(4)V99 VALUE 123.45 сохраняет его как "012345". Обратите внимание, что десятичная точка фактически не сохраняется.

это неэффективно формат в том, что она требует 8 бит для представления каждой цифры. Но у него есть "оптимизация" для подписанных чисел, используя половину последнего байта для хранения знака. Обычно все цифры EBCDIC имеют высокий nybble F, поэтому 0123 - F0 F1 F2 F3. Но -0123 - это F0 F1 F2 D3; D указывает на отрицательный. C означает положительный, а F означает неподписанный (т. е. положительный). (Подобные форматы используются в ASCII-версиях COBOL, но не стандартизированы.)

COMP-3 двоичный код десятичный с конечным знаком nybble. PIC 9(3) COMP-3 VALUE 123 становится двумя байтами 12 3F.

COMP или BINARY является родным двоичным форматом, так же, как short, int или long в с.


Как предполагает другой ответ, COMP означает большой двоичный файл endian. COMP-3 упакован decimal-что означает, что одна десятичная цифра отображается на каждый кусочек.

Я не уверен, что предыдущий ответ получил проблему вокруг точности правильно, хотя.

PIC S9 (9)V9 (9) COMP и PIC S9(9)V9 (9) COMP-3

иметь точно такую же точность. Это часть стандарта ANSI85. Это задача компилятора и среды выполнения, чтобы гарантировать, что двоичное представление в COMP имеет соответствующие преобразования, размещенные на нем, чтобы обеспечить ровно такие же результаты достиганы как если бы использование было дисплеем или комп-3.

мэйнфреймы IBM упаковали десятичные вычисления в аппаратное обеспечение. Это очень полезно, потому что преобразование десятичных в двоичные масштабы как N в квадрате n-это длина числа. Это означает, что COMP-3 часто является самым быстрым форматом мейнфрейма, но с меньшей вероятностью будет в распределенных системах. Но это опять-таки это не всегда так. Например, решение Micro Focus native COBOL будет, как правило, быстрее в COMP-3, чем COMP-5 для очень большой десятичной точности (>18 цифр), но в противном случае обратное. Управляемая система COBOL от Micro Focus почти всегда самая быстрая в COMP (на самом деле, COMP-5 - Лучший, который похож на COMP, но будет иметь аппаратный endian, а не применять макет памяти big-endian).

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

дополнительные на COBOL в распределенных и удалось проверить КОБОЛ этот Кнол: http://knol.google.com/k/alex-turner/micro-focus-managed-cobol/2246polgkyjfl/4, а также не стесняйтесь искать Кобол на facebook :)


Что касается решения, какой тип данных использовать, это может быть сделано очень сложно - но-простой набор рекомендаций:

дисплей и отредактированная зона Decimal должна использоваться только для отображения цифр в отчете или sysout. Переместите поля COMP и COMP-3 в поле отображения/редактирования, прежде чем поместить его в отчет или в sysout.

COMP - имеет самую быструю скорость расчета чисел

комп-3 (PACKED Decimal) - следует использовать, когда десятичной позиции должна быть сохранена.

Comp и COMP-3 поля могут использоваться вместе в расчетах. Компилятор определит, какой тип поля будет преобразован (под обложками) в один общий числовой тип данных - правила.