Entiers signés en COBOL

Comment représenter les nombres négatifs avec PIC S9 et SIGN LEADING SEPARATE

1. La clause de base : PIC S9(n)

Le S indique que la variable peut contenir des valeurs positives ou négatives.

IDENTIFICATION DIVISION.
PROGRAM-ID. ExempleSigne.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 MONTANT        PIC S9(6)      VALUE +123456.   ← peut être négatif
01 COMPTE-SOLDE   PIC S9(6)      VALUE -98765.
    
Important :
Le signe n'est pas stocké dans un caractère supplémentaire par défaut.
Il est généralement encodé dans le dernier octet (système "trailing sign" par défaut sur la plupart des compilateurs).

2. SIGN LEADING SEPARATE – Le signe devient visible

Quand on veut que le signe occupe vraiment un caractère distinct (souvent pour les fichiers texte, exports CSV, affichages clairs) :

01 SOLDE-BANCAIRE PIC S9(6) SIGN LEADING SEPARATE.

Représentation mémoire – SOLDE = –001234

1-
20
30
41
52
63
74

→ 7 octets occupés : le signe est un vrai caractère « - » ou « + »

3. Comparaison rapide des tailles

PIC 9(6)
6 octets
positif uniquement
PIC S9(6)
6 octets
signe codé dans le dernier octet
PIC S9(6) SIGN LEADING SEPARATE
7 octets
signe = caractère distinct