Translate

sábado, 18 de dezembro de 2021

O Mistério das Variáveis COMP e BINARY Quando Sherlock Holmes Descobre que o Verdadeiro Crime Nunca Foi o Código COBOL..

 

Bellacosa Mainframe e o cobol variaveis bynary e comp

☕ Um Café no Bellacosa Mainframe

O Mistério das Variáveis COMP e BINARY

Quando Sherlock Holmes Descobre que o Verdadeiro Crime Nunca Foi o Código COBOL... Foi Confundir Como os Números São Guardados na Memória

"Meu caro Watson... você observa um número. Eu observo como ele ocupa a memória."
— Sherlock Holmes, se tivesse trabalhado na IBM.


Introdução

Existem mistérios que desafiaram a humanidade durante séculos.

Quem foi Jack, o Estripador?

Onde está o Santo Graal?

Como Stonehenge foi construído?

Mas existe um enigma ainda mais intrigante para quem começa a programar em COBOL no IBM Mainframe.

Qual é a diferença entre COMP e BINARY?

À primeira vista parecem duas tecnologias diferentes.

Alguns livros usam COMP.

Outros usam BINARY.

Alguns dizem que um é antigo.

Outros afirmam que são iguais.

Há quem diga que COMP é mais rápido.

Há quem jure que BINARY é moderno.

Sherlock Holmes sorriria.

Porque esse é exatamente o tipo de caso onde as pistas estão todas espalhadas diante de nossos olhos.

Hoje vamos investigar este crime tecnológico.

Coloque seu chapéu de detetive.

Pegue sua lupa.

E venha até a Baker Street do IBM Z.

O jogo começou.



Capítulo 1 — A Cena do Crime

Watson chega ao laboratório.

Sobre a mesa existe um programa COBOL.

01 WS-IDADE PIC S9(4) COMP.

Ao lado existe outro.

01 WS-IDADE PIC S9(4) BINARY.

Watson pergunta:

— Holmes... qual deles é o correto?

Holmes acende o cachimbo.

Sorri.

E responde:

— Ambos.

Watson arregala os olhos.

— Como assim?

Holmes responde:

— Porque o verdadeiro mistério não está no nome.

Está na memória.


Capítulo 2 — O Primeiro Suspeito: DISPLAY

Antes de entender COMP precisamos compreender DISPLAY.

Imagine o número

12345

Quando declaramos

01 WS-NUMERO PIC 9(5).

o COBOL guarda exatamente cinco caracteres.

Na memória temos algo semelhante a:

+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+

Em hexadecimal:

F1 F2 F3 F4 F5

Cada dígito ocupa um byte.

É extremamente fácil de visualizar.

Mas existe um problema.

O processador IBM Z não faz contas com caracteres.

Ele faz contas com números binários.

Toda vez que executamos

ADD 1 TO WS-NUMERO

o compilador precisa:

  1. Ler caracteres.

  2. Converter para binário.

  3. Somar.

  4. Converter novamente.

  5. Escrever caracteres.

Sherlock olha para Watson.

— Muito trabalho para adicionar apenas um.


Capítulo 3 — O Verdadeiro Assassino: Conversão

Esse é o verdadeiro culpado.

Não é a instrução ADD.

Não é o compilador.

Não é o COBOL.

O culpado é a conversão.

Imagine fazer milhões de conversões por segundo.

Agora imagine um banco processando:

  • cartões

  • PIX

  • TED

  • boletos

  • empréstimos

  • seguros

  • previdência

Tudo ao mesmo tempo.

Cada conversão custa CPU.

CPU custa dinheiro.

Holmes fecha o caderno.

— Encontramos o motivo.

Agora falta descobrir a solução.


Capítulo 4 — Surge o BINARY

Ao invés de guardar

1
2
3

o computador resolve guardar

1111011

que é

123 decimal

Não existem caracteres.

Existe apenas o número.

O processador entende isso imediatamente.

Sem tradução.

Sem conversão.

Sem intermediários.

É exatamente isso que faz

USAGE BINARY

Capítulo 5 — E onde entra o COMP?

Watson encontra outra pista.

Um programa de 1987.

PIC S9(9) COMP.

Outro de 1994.

PIC S9(9) COMP.

Outro de 2026.

PIC S9(9) BINARY.

Holmes sorri.

— Encontramos nosso suspeito favorito.

COMP.


Capítulo 6 — A Revelação

Nos primórdios do COBOL, cada fabricante possuía suas próprias extensões.

IBM utilizava

COMP

Outros fabricantes preferiam

BINARY

Com o passar das décadas a IBM resolveu tornar o nome mais explícito.

Assim nasceu oficialmente

USAGE BINARY

Mas para preservar bilhões de linhas existentes...

COMP permaneceu funcionando.

Sherlock fecha a investigação.

COMP e BINARY.

Mesmo armazenamento.

Mesmo código gerado.

Mesmo desempenho.

Nomes diferentes.

Mesmo suspeito.



Capítulo 7 — A Anatomia do Binário

Vamos abrir o corpo...

...do número.

Suponha

PIC S9(4) COMP.

O valor

123

vira

00000000 01111011

São apenas dois bytes.

Enquanto DISPLAY precisava de quatro caracteres...

COMP usa somente dois bytes.

Economia de memória.

Economia de CPU.

Maior velocidade.


Capítulo 8 — Quantos Bytes?

Sherlock desenha na lousa.

DeclaraçãoBytes
S9(1) até S9(4)2
S9(5) até S9(9)4
S9(10) até S9(18)8

Curiosamente...

Mesmo que o número seja

1

um

PIC S9(18) COMP

continuará ocupando oito bytes.

Porque o espaço é reservado pelo tipo.

Não pelo conteúdo.


Capítulo 9 — O Cofre do Banco

Imagine um enorme banco.

Existem três cofres.

Primeiro cofre

DISPLAY.

Guarda tudo escrito.

Fácil de ler.

Difícil de calcular.


Segundo cofre

BINARY.

Guarda apenas números.

Perfeito para matemática.


Terceiro cofre

COMP-3.

Guarda cada dígito decimal exatamente.

Ideal para dinheiro.

Sherlock bate na mesa.

— Nunca misture os cofres.



Capítulo 10 — O Caso dos Centavos Perdidos

Suponha

19,99

Será que cabe perfeitamente em binário?

Não.

Assim como

1/3

não cabe exatamente em decimal.

Algumas frações decimais não possuem representação binária exata.

Por isso bancos usam

PIC S9(9)V99 COMP-3

Cada centavo é preservado.

Nenhum arredondamento inesperado.

Nenhum processo judicial.

Nenhum gerente desesperado.


Capítulo 11 — Quando Usar COMP?

Sherlock entrega uma lista.

✔ Contadores

✔ Loops

✔ Índices

✔ Número de registros

✔ Totalizadores inteiros

✔ Controle interno

✔ Sequenciadores

✔ Flags numéricas

✔ Códigos internos

✔ Chaves temporárias


Capítulo 12 — Quando NÃO Usar

Nunca para:

  • salários

  • juros

  • impostos

  • aplicações financeiras

  • câmbio

  • contas bancárias

Nesses casos...

COMP-3 reina absoluto.


Capítulo 13 — Um Passeio pela CPU do IBM Z

Quando o compilador encontra

ADD WS-A TO WS-B

com ambos em COMP/BINARY, ele pode gerar instruções nativas da arquitetura z/Architecture, como:

  • AH (Add Halfword)

  • A (Add)

  • AG (Add Grande)

  • AGR (Add Grande em Registrador)

O processador trabalha diretamente com inteiros binários.

É como entregar a Sherlock uma pista já traduzida.

Sem precisar chamar um intérprete.


Capítulo 14 — O Segredo que Quase Ninguém Conta

Existe uma razão histórica para encontrarmos milhões de variáveis COMP em sistemas bancários.

Durante décadas, praticamente toda a documentação IBM utilizava COMP.

Mesmo quando BINARY passou a existir, ninguém reescreveu bilhões de linhas de código.

Resultado?

Hoje encontramos programas escritos em 1985 que compilam sem qualquer alteração em um IBM z17.

Essa é uma das maiores demonstrações da retrocompatibilidade do ecossistema IBM.

Enquanto outras plataformas obrigam reescritas completas, o Mainframe preserva investimentos de décadas.

Esse talvez seja o maior "superpoder" do IBM Z.


Capítulo 15 — E o Misterioso COMP-5?

Watson acredita que o caso terminou.

Holmes sorri novamente.

— Ainda existe outro personagem.

COMP-5.

Ele também utiliza armazenamento binário.

Mas, diferentemente de COMP/BINARY, segue mais de perto a representação inteira nativa da máquina, sendo muito usado em interfaces de baixo nível, chamadas de sistema, APIs, rotinas em C e integrações específicas no z/OS.

Não substitui COMP.

É uma ferramenta especializada.

Mais um suspeito inocentado.


Capítulo 16 — Passo a Passo para Escolher o Tipo Correto

Imagine que você está criando uma variável. Faça estas perguntas:

1. É texto?

  • Use PIC X(...).

2. É um número apenas para exibição ou entrada do usuário?

  • Use DISPLAY (padrão).

3. É um contador, índice ou acumulador inteiro?

  • Use COMP ou BINARY.

4. Representa dinheiro, impostos, juros ou valores decimais exatos?

  • Use COMP-3.

5. Vai interoperar diretamente com APIs de baixo nível ou código em C?

  • Avalie COMP-5.

Seguindo esse roteiro, a chance de errar diminui drasticamente.


Curiosidades de Baker Street

Curiosidade 1

A maioria dos iniciantes acredita que COMP significa "Compact".

Na verdade, historicamente o nome está associado à ideia de Computational, indicando um formato otimizado para processamento interno.


Curiosidade 2

Milhões de programas COBOL escritos nas décadas de 1970 e 1980 ainda utilizam exclusivamente COMP.


Curiosidade 3

Você pode passar anos trabalhando em Mainframe sem nunca encontrar uma variável declarada explicitamente como BINARY, embora ela esteja sendo usada o tempo todo sob o nome COMP.


Curiosidade 4

Em dumps de memória (CEEDUMP, IPCS ou Abend-AID), reconhecer rapidamente um campo COMP pode acelerar muito a identificação de corrupção de dados e problemas de alinhamento.


Easter Eggs Bellacosa Mainframe 🕵️

🔎 221B Baker Street = SYS1.PROCLIB
É dali que começam muitas investigações importantes.

🔎 Dr. Watson = Programador Júnior
Sempre faz a pergunta certa, mesmo sem perceber.

🔎 Sherlock Holmes = Analista de Performance
Enxerga conversões de dados onde ninguém mais vê.

🔎 Professor Moriarty = CPU em 99%
O verdadeiro vilão pode estar escondido em milhões de conversões desnecessárias entre DISPLAY e BINARY.

🔎 Scotland Yard = Operação do CPD
Chega quando o incidente já aconteceu.

🔎 A lupa de Holmes = IPCS, Abend-AID, Fault Analyzer e SMF
Ferramentas que revelam pistas invisíveis ao olho comum.



Conclusão — O Caso Está Encerrado

Sherlock fecha o dossiê.

Watson observa as anotações.

A resposta era muito mais simples do que parecia.

COMP e BINARY não são rivais.

São duas faces da mesma moeda no Enterprise COBOL para IBM Z.

O verdadeiro aprendizado não é decorar palavras-chave, mas compreender como os dados vivem na memória. É essa compreensão que diferencia quem apenas escreve programas de quem realmente entende a plataforma.

Da próxima vez que você encontrar:

01 WS-CONTADOR PIC S9(9) COMP.

não enxergue apenas uma declaração.

Veja décadas de história da computação corporativa, bilhões de linhas de código preservadas, a elegância da retrocompatibilidade da IBM e um processador IBM Z executando operações binárias com precisão quase cirúrgica.

Porque, assim como Sherlock Holmes nunca resolvia um caso olhando apenas para o suspeito, um grande programador COBOL nunca olha apenas para a variável.

Ele observa o que está escondido por trás dela.

E é justamente ali, na memória, que mora o verdadeiro mistério.

O Grande Mistério da Memória

                 DADO COBOL
                     │
     ┌───────────────┼───────────────┐
     │               │               │
 DISPLAY         BINARY/COMP      COMP-3
     │               │               │
 Texto          Inteiro Binário   Decimal Empacotado

1) DISPLAY

Como o ser humano enxerga

Número:

12345

Na memória

+----+----+----+----+----+
| F1 | F2 | F3 | F4 | F5 |
+----+----+----+----+----+

ou

+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+

Cada caractere ocupa

1 BYTE

Total

5 BYTES

✔ Fácil leitura

✔ Fácil gravação em arquivos texto

❌ CPU precisa converter para fazer contas


2) COMP / BINARY

Número

12345

Decimal

12345

Binário

00110000 00111001

Na memória

+--------+--------+--------+--------+
|             12345                |
+--------+--------+--------+--------+

ou

00003039 (HEX)

Ocupa

4 BYTES

✔ Processador calcula diretamente

✔ Muito rápido

✔ Excelente para loops

✔ Excelente para contadores


Comparação Visual

DISPLAY

┌─┬─┬─┬─┬─┐
│1│2│3│4│5│
└─┴─┴─┴─┴─┘

COMP

┌─────────────────┐
│00003039 (HEX)   │
└─────────────────┘

Mesmo número.

Representações totalmente diferentes.


3) COMP-3 (Packed Decimal)

Número

12345

Na memória

+----+----+----+
|12|34|5C|
+----+----+----+

Cada byte guarda

2 dígitos

O último nibble

C

indica

positivo

Se negativo

D

Exemplo

12345

↓

12 34 5C

Ocupa

3 BYTES

Exemplo Financeiro

R$ 1523,87

COMP-3

152387C

Nenhum centavo perdido.

Nenhum arredondamento.

Precisão decimal absoluta.


4) COMP-5

Visualmente

COMP

┌────────────────┐
│ Inteiro Binário│
└────────────────┘

COMP-5

┌──────────────────────────────┐
│ Inteiro Nativo da Arquitetura│
└──────────────────────────────┘

Muito usado em

✔ APIs

✔ C

✔ LE

✔ Chamadas de Sistema

✔ Integração


Comparativo Geral

                 DISPLAY
                     │
        Fácil leitura humana
                     │
          Conversão obrigatória
                     │
             Mais CPU utilizada

              COMP/BINARY
                     │
         Número em Binário
                     │
        CPU calcula diretamente
                     │
             Muito rápido

                COMP-3
                     │
      Decimal Exato
                     │
      Ideal para dinheiro

                 COMP-5
                     │
     Binário da Arquitetura
                     │
      APIs e Baixo Nível

Quantidade de Bytes

DeclaraçãoDISPLAYCOMPCOMP-3
S9(4)423
S9(9)945
S9(18)18810

Velocidade

DISPLAY

READ

↓

Converter

↓

Somar

↓

Converter

↓

WRITE

CPU

██████████████████

COMP

READ

↓

SOMAR

↓

WRITE

CPU

██████

Quando usar?

DISPLAY

✔ Relatórios

✔ Tela

✔ Arquivos TXT

✔ Entrada do usuário


COMP/BINARY

✔ Contadores

✔ Índices

✔ Loops

✔ Acumuladores

✔ Controle interno


COMP-3

✔ Salário

✔ Juros

✔ PIX

✔ TED

✔ Bancos

✔ Impostos

✔ Contabilidade


COMP-5

✔ APIs

✔ DLL

✔ C

✔ LE

✔ z/OS

✔ Chamadas internas


Exemplo Real

01 WS-NOME        PIC X(30).
01 WS-IDADE       PIC S9(4) COMP.
01 WS-CONTADOR    PIC S9(9) BINARY.
01 WS-SALARIO     PIC S9(9)V99 COMP-3.
01 WS-API-CODE    PIC S9(9) COMP-5.

Fluxo da CPU IBM Z

               Programa COBOL
                     │
                     ▼
             Enterprise COBOL
                     │
                     ▼
        Instruções z/Architecture
                     │
     ┌───────────────┼───────────────┐
     ▼               ▼               ▼
 DISPLAY         COMP/BINARY      COMP-3
 Conversão      Soma Direta      Decimal Exato
     │               │               │
     └───────────────┴───────────────┘
                     ▼
                 Resultado

Regra de Ouro

É TEXTO?

↓

DISPLAY
É CONTADOR?

↓

COMP ou BINARY
É DINHEIRO?

↓

COMP-3
É API?

↓

COMP-5

Bellacosa Mainframe — Dica do Detetive 🕵️

Sherlock Holmes olharia para uma variável e perguntaria: "Como ela é armazenada?" Antes mesmo de perguntar "Qual é o seu valor?".

No universo do IBM Mainframe, o segredo da performance não está apenas no algoritmo, mas na escolha correta do formato de armazenamento. Saber quando usar DISPLAY, COMP/BINARY, COMP-3 ou COMP-5 é uma habilidade que diferencia um programador COBOL iniciante de um verdadeiro especialista em IBM Z.

Sem comentários:

Enviar um comentário

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...