COBOL - COMP COMP-1 COMP-2 COMP-3 COMP-4 COMP-5 - www.cadcobol.com.br


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

COBOL - COMP COMP-1 COMP-2 COMP-3 COMP-4 COMP-5
COMPUTATIONAL ou COMP (binário)

A cláusula de uso COMP será chamada de BINARY ou COMPUTATION.
Cláusula de uso COMP aplicável apenas ao tipo de dados Numérico.
O uso COMP é uma representação binária de dados.
Os dados nas variáveis COMP armazenavam a memória em formato binário puro.
A alocação de memória para COMP USAGE é como abaixo.

PICTURE Número de bytes
S9 a S9(4) 2
S(5) a S9(9) 4
S9(10) a S9(18) 8

Vamos dar um exemplo para exibir todos os tipos de dados que estão passando pelo programa e ver como fica depois de escrever no programa.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. COM1.
	  
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A PIC S9(8) USAGE COMP.
	  
       PROCEDURE DIVISION.
           INITIALIZE A
           MOVE '1234567' TO A.
           DISPLAY A.
           DISPLAY 'LENGTH ' LENGTH OF A.
           STOP RUN.
		   
       Resultado:

       +01234567
       LENGTH 4
COMPUTATIONAL-1 ou COMP-1 (ponto flutuante)

A cláusula de uso COMP-1 será chamada de ponto flutuante.
A cláusula de uso COMP-1 é aplicável ao tipo de dados de ponto flutuante único.
COMP-1 é especificado para itens de ponto flutuante internos que são de precisão simples.
Os itens COMP-1 têm 4 bytes de comprimento.
A cláusula PICTURE não deve ser especificada.
COMP-1 permite o item de ponto flutuante assinado onde o sinal será armazenado no primeiro bit do byte mais à esquerda que é alocado ao expoente.
Nos 4 bytes, os 8 bits mais à esquerda para armazenar o expoente e os 24 bits restantes armazenam a mantissa.
Os cálculos de memória COMP-1 como abaixo.

PICTURE Número de bytes
9(16) - 1 palavra 4

O COMP-1 armazenará os dados no formato de mantissa e expoente.
Aqui Mantissa é o valor numérico e o expoente é o número de precisão.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. COM1.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  A USAGE COMP-1.

       PROCEDURE DIVISION.
           INITIALIZE A
           MOVE '1234567' TO A.
           DISPLAY A.
           DISPLAY 'LENGTH ' LENGTH OF A.
           STOP RUN.		

       Resultado:

       1234567
       LENGTH 4
COMPUTATIONAL-2 ou COMP-2 (ponto flutuante longo)

A cláusula de uso COMP-2 será chamada como forma hexadecimal.|
Cláusula de uso COMP-2 aplicável ao tipo de dados de ponto flutuante duplo.
COMP-2 é especificado para itens de ponto flutuante internos que são de precisão dupla.
Os itens COMP-2 têm 8 bytes de comprimento.
A cláusula PICTURE não deve ser especificada.
COMP-2 permite o item de ponto flutuante assinado onde o sinal será armazenado no primeiro bit do byte mais à esquerda que é alocado ao expoente.
Nos 8 bytes, os 12 bits mais à esquerda para armazenar o expoente e os 52 bits restantes armazenam a mantissa.
Os cálculos de memória COMP-2 como abaixo.

PICTURE Número de bytes
9(32) - 2 palavras 8

O COMP-2 armazenará os dados no formato de mantissa e expoente.
Aqui Mantissa é o valor numérico e o expoente é o número de precisão.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. COM2.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  A USAGE COMP-2.

       PROCEDURE DIVISION.
           INITIALIZE A
           MOVE '1234567' TO A.
           DISPLAY A.
           DISPLAY 'LENGTH ' LENGTH OF A.
           STOP RUN.		

       Resultado:

       1234567
       LENGTH 8
COMPUTATIONAL-3 ou COMP-3 (decimal interno)

A cláusula de uso COMP-3 será chamada como forma decimal compactada.
A cláusula de uso COMP-3 é aplicável ao tipo de dados numérico.
O COMP-3 armazenará os dados conforme empacotados. ou seja, dois dígitos em cada byte.
Os dados COMP-3 serão armazenados na memória como formato BCD (Binary Coded Decimal).
Dados COMP-3 armazenados na memória maior para menor no tamanho do nibble (4 bits), ou seja, o nibble superior armazena o dígito mais significativo e o nibble inferior armazena o próximo dígito e o nibble superior armazena o próximo dígito etc.
COMP-3 permite item decimal empacotado assinado onde o sinal armazenará o dígito menos significativo (nibble inferior mais à direita).
No COMP-3 Sign, sempre coloque um nibble na tabela, portanto, sempre um número par de nibbles alocados.

Ele usa um bit mais à direita para armazenar o sinal, independentemente de termos usado S na cláusula PIC ou não.
O número hexadecimal C e F armazena o sinal positivo no bit mais à direita e D armazena o sinal negativo no bit mais à direita.
Podemos usar 9, S e V na cláusula PIC durante a declaração de dados.

PICTURE Número de bytes
9 ½ Byte

A fórmula para cálculo de memória do item de dados COMP-3 declarado com N bytes.
Cláusula PICTURE necessária para a declaração COMP-3.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. COM3.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  A PIC 9(4)V9(2) USAGE COMP-3.
       01  B PIC 9(4).9(2).
       PROCEDURE DIVISION.
           INITIALIZE A
           MOVE 1234.67 TO A.
           MOVE A TO B.
           DISPLAY A.
           DISPLAY 'LENGTH ' LENGTH OF A.
           DISPLAY B.
           DISPLAY 'LENGTH ' LENGTH OF B.
           STOP RUN.
		   
        Resultado:
		   
        1234.67
        LENGTH 4
        1234.67
        LENGTH 7
COMPUTATIONAL-4 ou COMP-4 (binário)

Equivalente ao um item binário.

COMPUTATIONAL-5 ou COMP-5 (binário nativo)

Os dados armazenados em COMP-5 possuem o truncamento no tamanho do campo binário, em vez do limite especificado pela PICTURE na declaração Cobol.
Quando um item COMP-5 é referenciado, todo o campo binário é utilizado na operação.
A opção do compilador TRUNC(BIN) faz com que todos os itens de dados binários (USAGE BINARY, COMP, COMP-4) sejam tratados como itens COMP-5.

A tabela abaixo mostra o armazenamento ocupado e intervalo de valores suportados para cada PICTURE de um item COMP-5.

A PICTURE para um item COMP-5 pode ser definida com o fator de escala, isto é, posições inteiras ou decimais implícitas, por exemplo a declaração PICTURE S99V99 COMP-5 é representado com uma halfword binária.
Assim, os valores suportados apresentados na tabela devem ser dimensionados adequadamente para quando ocorrer essa situação.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. COM3.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  A PIC 9(4)V9(2) USAGE COMP-5.
       01  B PIC 9(4).9(2).
       PROCEDURE DIVISION.
           INITIALIZE A
           MOVE 1234.67 TO A.
           MOVE A TO B.
           DISPLAY A.
           DISPLAY 'LENGTH ' LENGTH OF A.
           DISPLAY B.
           DISPLAY 'LENGTH ' LENGTH OF B.
           STOP RUN.
		   
        Resultado:
		   
        1234.67
        LENGTH 4
        1234.67
        LENGTH 7