CUANDO PONES HEX ON QUE VES REALMENTE

Todo lo relacionado con JCL, manejo de jobs, etc.
Responder
HUMA

CUANDO PONES HEX ON QUE VES REALMENTE

Mensaje por HUMA »

Buenos días, tengo una pregunta que seguro que será muy fácil de responder:

yo, dentro de host, cuando voy a ver un fichero (por ejemplo por 3.4) si pongo HEX ON en COMMAND , en principio veo hexadecimal....¿alguien me podría explicar cómo se coloca ese número en hexadecimal?

por ej.

000000000001°
FFFFFFFFFFFF9
0000000000010

me gustaría saber si abajo está en hexadecimal y arriba en que sistema de representación esta....

muchas gracias
Vicente

Re: CUANDO PONES HEX ON QUE VES REALMENTE

Mensaje por Vicente »

Hola Huma,
En EBCDIC:
el código hexadecimal del cero es F0
el código hexadecimal del uno es F1
el código hexadecimal del cerito de primero es 90

En tu caso, por cada linea del fichero, HEX ON muestra 3 líneas:
En la primera ves la representación visual del caracter (como si estuvieses en HEX OFF)
En la segunda ves la primera parte (4 bits más representativos) del código hexadecimal del caracter que hay encima.
En la tercera ves la segunda parte (4 bits menos representativos) del código hexadecimal del caracter que hay encima.

Para escribir en hexadecimal (modificando el fichero) basta con escribir encima de una de estas tres líneas.
Ten en cuenta que para poder modificar un fichero has de estar en modo EDIT y no en modo VIEW ni BROWSE

Un saludo
HUMA

Re: CUANDO PONES HEX ON QUE VES REALMENTE

Mensaje por HUMA »

Genial! ahora ya sé por lo menos qué veo en un fichero al abrirlo, jejeje...(supongo que tendrá alguna razón de ser que esté representado en EBCDIC, bucearé por internet para curiosear sobre el tema).

Como las dos lineas de abajo son la representación hexadecimal, me surge una pregunta...¿es un hexadecimal "normal"? me explico...he leído que para representar números con signo hay dos posibilidades:
- terminados en "C" (positivos)
- terminados en "D" (negativos)
que yo recuerde la representación decimal contempla los dígitos: 0, 1, 2, ..., 9, A, B, C, D, E y F.

Por ejemplo, defino en mi PGM que del fichero de entrada saco el dato:
01 WX-REGISTRO-ENTRADA.
05 WX-NUMERO PIC S9(7).


en mi fichero de entrada pongo "3D" en hexadecimal ;

0000003
000000D

será el número 61 en decimal ( 3*16 + 13*1 = 48 + 13 = 61 ) nada que ver con un número negativo.
Vicente

Re: CUANDO PONES HEX ON QUE VES REALMENTE

Mensaje por Vicente »

Hola Huma,
Los mainframe no utilizan ASCII para su codificacion interna, si no EBCDIC por razones históricas.

No existen hexadecimales normales ni anormales, si no solo números expresados en hexadecimal.

En cualquier ordenador o en cualquier archivo informático (textos, imágenes, etc.) todo es número.
Así es que
¡¡CUIDADO con las interpretaciones!! de esos números]

Me explico con un ejemplo:
¿Que significan, en un texto, la letra A seguida de la letra S, es decir AS?
La respuesta no es obvia, pues depende si quien lo lea es inglés, español o griego, ya que en cada uno de los idiomas significa una cosa distinta.
Pero la representación hexadecimal en EBCDIC de los caracteres AS, siempre es C1 E2.
Otro ejemplo es el hexadecimal 7B que para nosotros es una Ñ y para un inglés o un sueco es otra letra.
De estos ejemplos se deduce que el significado de algo no es absoluto y por tanto emisor y receptor tienen que ponerse de acuerdo en como interpretar las cosas.

En tu caso has utilizado lo que llamas número negativo "3D", (en mi siguiente post ampliaré) pero permíteme que te hable del 4D y del 5D.
Si lo interpretas como número sin signo podrían ser, según tus cáculos, los números decimales 77 y 93.
Pero si lo interpretas como caracteres son los paréntesis.

En un ordenador todo son bytes; y un byte solo es una secuencias de 8 dígitos binarios que lo podemos representar en código binario, en hexadecimal, en decimal, en octal, etc.; pero, como 8 bits que son, solo es un número entre el 0 y el 255 (o, en hexadecimal, entre 00 y FF) sin más connotaciones de si es positivo, negativo, si es una letra, si es un pixel, etc.

Entonces la gran pregunta es:
¿Que significan una serie de bytes puestos uno a continuación del otro?
La única respuesta es que, para cada caso tenemos que ponernos de acuerdo en como interpretarlos.
Creador y receptor de los bytes tienen que utilizar el mismo CONVENIO de interpretación.

Un saludo
Vicente

Re: CUANDO PONES HEX ON QUE VES REALMENTE

Mensaje por Vicente »

Hola Huma,
Después de la aclaración de conceptos, hablemos de tu número, descrito en cobol como PIC S9(7).
Por simplificar utilzaré un PIC S9(4) solo de cuatro cifras, con un valor de +1234 o -1234.
En el cobol de zOS:
La representación interna (en hexadecimal) de +1234 definido como S9(4) es F1 F2 F3 C4
La representación interna (en hexadecimal) de -1234 definido como S9(4) es F1 F2 F3 D4
Como ves se sacrifica la primera mitad del último byte para indicar que el úmero es positivo o negativo (esto es un CONVENIO, se acuerda que se haga así).
Pero si nadie nos hubiese dicho que los interpretásemos como números con signo, y dado que C4 y D4, en EBCDIC, corresponden a las letras D y M, también podríamos interpretar las sicuencias de bytes como 123D y 123M con desastrosos resultados si intentamos hacer operaciones aritméticas con ellas

Si en lugar de PIC S9(4) le dijéramos al Cobol PIC S9(4) SIGN LEADING, el cobol de manera interna utilizaría las representaciones:
C1 F2 F3 F4 y D1 F2 F3 F4
En este caso se sacrifica la primera mitad del primer byte para informar de que se interprete como número positivo o negativo.
Y una vez más C1 y D1 podrían corresponderse con las letras A y J si no noshubiesen advertido como interpretarlos.

Seguimos avanzando y nos preguntamos
¿por qué representar el 1234 como F1 F2 F3 F4 y gastar así 4 bytes de memoria, cuando podríamos representar el número 1234 con la pareja de bytes cuyos dos códigos hexadecimales son 12 y 34 ?
Nos inventamos así un nuevo convenio de representar un número decimal de 4 cifras mediante dos bytes, (lo que signifiquen esos dos bytes si fuesen interpretados como letras no nos interesa pues tenemos nuestro propio convenio de interpretación).
Nuestro nuevo acuerdo no tiene en cuenta signos, solo maneja números positivos; pero si quisieramos distinguir entre positivos y negativos, complicaríamos un poco nuestro CONVENIO para acercarnos al concepto de COMPUTATIONAL de cobol, los PIC S9(4) COMP etc.

Creo que hasta aquí es suficiente para aclarar las cosas, por lo que no voy a hablar de los número en coma flotante (o notación científica) ni de otros.

El intercambio de información siempre estará basado en convenios de interpretación entre las partes

Espero que mis comentarios ayuden a aclarar conceptos e ideas.
Un saludo
Vicente

Re: CUANDO PONES HEX ON QUE VES REALMENTE

Mensaje por Vicente »

¿Que significa el byte cuya representación EBCDIC hexadecimal es C1?

1) Si lo interpretamos como una letra, es la letra A

2) Si lo interpretamos como un número con signo PIC S9, es el número +1

3) Si lo interpretamos como un número decimal sin signo es el 12*16 +1 = 193

4) Si lo interpretamos como 8 btis de una imagen en blanco y negro, ya que en binario C1 = 11000001
es un trozo de una línea de pixeles donde hay un pixel negro, otro pixel negro, 5 pixeles blancos seguidos y un pixel negro más.
(siempre y cuando no esté invertido el CONVENIO de la fotometría)

5) En otros contextos C1 puede significar cualquier cosa que queramos acordar
HUMA

Re: CUANDO PONES HEX ON QUE VES REALMENTE

Mensaje por HUMA »

Una explicación magistral, muchas gracias!!
:reverencia:
Voy a ponerle COMP-3 a mi PGM a ver si consigo meterle positivos y negativos como dios manda.
Responder