stringtranslate.com

Sobrepunción firmada

En informática, un sobrepunzón con signo es un esquema de codificación que almacena el signo de un número cambiando (normalmente) el último dígito. Se utiliza en datos de caracteres en mainframes IBM mediante lenguajes como COBOL , PL/I y RPG . [1] Su propósito es guardar un carácter que de otro modo sería utilizado por el dígito del signo. [2] El código se deriva del Código de tarjeta perforada de Hollerith , donde se pueden introducir tanto un dígito como un signo en la misma columna de la tarjeta. Se denomina sobrepunzón porque el dígito de esa columna tiene un punzón de 12 o de 11 encima para indicar el signo. Las tres primeras filas de la tarjeta se denominan punzones de zona , [3] y, por tanto, los datos de caracteres numéricos que pueden contener sobrepunzones se denominan decimales zonificadas .

En la terminología de IBM, los cuatro bits de orden inferior de un byte en almacenamiento se denominan dígito y los cuatro bits de orden superior son la zona . [4] Los bits de dígito contienen el valor numérico 0–9. Los bits de zona contienen 'F'x, formando los caracteres 0–9, o la posición de carácter que contiene la sobrepunción contiene un valor hexadecimal que indica un valor positivo o negativo, formando un conjunto diferente de caracteres. (Las zonas A, C, E y F indican valores positivos, B y D negativos).

La PACKinstrucción en las máquinas con arquitectura IBM System/360 convierte el signo de un número decimal zonificado al convertirlo a decimal empaquetado , y la UNPKinstrucción correspondiente establecerá el signo sobrepuncionado correcto de su salida decimal zonificada. [5]

Soporte de idiomas

PL/Yo

PL/I utiliza el PICTUREatributo para declarar datos decimales zonificados con una sobrepunción con signo. Cada carácter en una imagen numérica, excepto V, que indica la posición del punto decimal supuesto, representa un dígito. Un carácter de imagen de T, Io Rindica una posición de dígito que puede contener una sobrepunción. Tindica que la posición contendrá {–I si es positivo y {–R si es negativo. Iindica que la posición contendrá {–I si es positivo y 0-9 si es negativo. Rindica que la posición contendrá 0–9 si es positivo y {–R si es negativo.

Por ejemplo, PICTURE 'Z99R'describe un campo numérico de cuatro caracteres. La primera posición puede estar en blanco o contener un dígito del 0 al 9. Las dos posiciones siguientes contendrán dígitos y la cuarta posición contendrá del 0 al 9 para un número positivo y {–R para un número negativo. [6]

Asignar el valor 1021 a la imagen de arriba almacenará los caracteres "1021" en la memoria; asignar -1021 almacenará "102J".

COBOL

COBOL utiliza el carácter de imagen 'S' para USAGE IS DISPLAYlos datos sin SIGN IS SEPARATE CHARACTERpara indicar una perforación adicional. SIGN IS LEADINGindica que la perforación adicional está sobre el primer carácter del campo. SIGN IS TRAILING, lo ubica sobre el último carácter. SIGN IS TRAILINGes el valor predeterminado. [7]

C/C++

El lenguaje C no tiene ninguna disposición para decimales con zonas. El compilador IBM ILE C/C++ para System i proporciona funciones para la conversión entre intor doubley decimales con zonas: [8]

Códigos de sobreperforación EBCDIC

Ejemplos

10} es -100
45A es 451

Representación ASCII

La representación de caracteres con signo de sobrepunción "no está estandarizada en ASCII, y los distintos compiladores utilizan distintos códigos de sobrepunción". En algunos casos, "la representación no es la misma que el resultado de convertir un campo con signo EBCDIC a ASCII con una tabla de traducción". [10] En otros casos son iguales, para mantener la compatibilidad de los datos de origen en caso de pérdida de la conexión entre el código del carácter y el dígito correspondiente.

Un campo negativo EBCDIC que termina con el dígito '1' codificará ese dígito como 'D1'x, 'J' mayúscula, donde el dígito es '1' y la zona es 'D' para indicar un campo negativo. La 'J' mayúscula ASCII es '4A'x, donde el valor hexadecimal no guarda relación con el valor numérico. Una codificación alternativa utiliza 'q' minúscula, '71'x, para esta representación, donde el dígito es '1' y la zona es '7'. Esto preserva el dígito y la secuencia de cotejo a costa de tener que reconocer y traducir campos con perforaciones de forma individual.

Ejemplos

Gnu COBOL y MicroFocus COBOL utilizan letras minúsculas de la 'p' a la 'y' para representar los números negativos del '0' al '9'. [11] [12]

Los compiladores PL/I en sistemas ASCII utilizan el mismo conjunto de caracteres ({, J–R) que EBCDIC para representar perforaciones superpuestas. [13]

Referencias

  1. ^ IBM Corporation (junio de 1994). Referencia RPG/400 (PDF) . pág. 403. Consultado el 7 de agosto de 2018 .
  2. ^ "Charla técnica, tutoriales COBOL, conversión de EBCDIC a ASCII de campos con signo" . Consultado el 15 de marzo de 2008 .
  3. ^ Van Overberghe, Jr., Albert G. (1987). Técnico en procesamiento de datos de tercera clase. Programa de educación y capacitación naval. págs. 3–8 . Consultado el 12 de enero de 2022 .
  4. ^ IBM Corporation. Principios de funcionamiento del IBM System/360 (PDF) . pág. 34 . Consultado el 12 de enero de 2022 .
  5. ^ IBM Corporation (octubre de 2001). z/Architecture Principles of Operation (2.ª ed.). págs. 7–112, 7–158 . Consultado el 7 de agosto de 2018 .
  6. ^ IBM Corporation (junio de 1995). Referencia del lenguaje IBM PL/I para MVS y VM (PDF) . pp. 294–296 . Consultado el 2 de agosto de 2018 .
  7. ^ IBM Corporation. "Enterprise COBOL for z/OS, V4.2, Referencia del lenguaje". IBM Knowledge Center . Consultado el 1 de mayo de 2020 .
  8. ^ IBM Corporation. «Funciones de biblioteca». IBM Knowkedge Center . Consultado el 1 de mayo de 2020 .
  9. ^ IBM Corporation (1989). Resumen de referencia de la arquitectura extendida del sistema/370 . pág. 41.
  10. ^ "Conversión de campos con signo de EBCDIC a ASCII". Especialistas en conversión de medios DISC . Consultado el 29 de noviembre de 2018 .
  11. ^ "Guía del programador de GnuCOBOL". SourceForge . Consultado el 12 de enero de 2022 .
  12. ^ "Micro Focus Visual COBOL 5.0 para Visual Studio 2019". Micro Focus . Consultado el 12 de enero de 2022 .
  13. ^ Kednos Corporation. "Manual de referencia de sistemas Kednos PL/I para OpenVMS". Kednos.com . Consultado el 12 de enero de 2022 .