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