Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cuántos bytes tiene un real? (https://www.clubdelphi.com/foros/showthread.php?t=44848)

kakarotv5 16-06-2007 00:42:44

¿Cuántos bytes tiene un real?
 
Tras ver la asignatura de Estructura y Tecnología de Computadores (como ya sabeis en ella se ve a fondo el funcionamiento de un computador, nosotros más en concreto vimos el Motorola 68000) he comprendido del todo la razón de los tipos de datos Byte y Word de Pascal / Object Pascal, por ello me ha picado el gusanillo y he empezado a hacer esto:

Byte [0,255]
=> Como su nombre indica está formado por un byte (por tanto tenemos 8 bits para el número por lo que el número más alto será (2^8)-1 = 255).

Word [0,65535] => Como su nombre tiene una longitud de una palabra, es decir, dos bytes (por tanto tenemos 16 bits para el número por lo que el número más alto será (2^16)-1 = 65535).

Char [0,255] => Por lo que deduzco es un byte ya que un caracter ASCII ocupa un byte.
Ejemplo: la letra A es el número 41 en hexadecimal, como 41 tiene dos cifras ocupa un byte.

ShortInt [-128,127]
=> Por lo que deduzco es un byte (como hay signo un bit se usa para tal efecto con lo que tenemos 7 bits para el número por tanto el número más alto será (2^7)-1 = 127).

Integer [-32768,32767] => Por lo que deduzco que está formado por dos bytes (como hay signo un bit se usa para tal efecto con lo que tenemos 15 bits para el número por tanto el número más alto será (2^15)-1 = 32767).

LongInt [-2147483646,2147483647] => Por lo que deduzco que está formado por cuatro bytes (como hay signo un bit se usa para tal efecto con lo que tenemos 31 bits para el número por tanto el número más alto será (2^31)-1 = 2147483647).

¿Y el tipo de dato real? Este (y los demás que son en punto flotante) me descoloca, no se cuantos bytes tiene ni como expresar el número más alto de la forma 2^numero_bits - 1, lo único que se es que tiene este rango 1E-38 a 1E+38. No he trabajado con números decimales en ensamblador.

Saludos.

seoane 16-06-2007 01:05:31

No te calientes la cabeza, la función Sizeof te devuelve el tamaño en bytes de cualquier variable, o tipo. Por ejemplo:
Código Delphi [-]
  ShowMessage(IntToStr(Sizeof(Real)));

Y sino también puedes mirar la ayuda:
Código:

Type                Range                                        digits                Size in bytes
Real48                2.9 x 10^-39 .. 1.7 x 10^38                11-12                6
Single                1.5 x 10^-45 .. 3.4 x 10^38                7-8                4
Double                5.0 x 10^-324 .. 1.7 x 10^308                15-16                8
Extended        3.6 x 10^-4951 .. 1.1 x 10^4932                19-20                10

Es mejor que te acostumbres a usar Sizeof, porque a veces pasan cosas curiosas como esta:
Código Delphi [-]
var
  Ejemplo: record
    i: Integer;
    b: byte;
  end;
begin
  ShowMessage(IntToStr(Sizeof(Ejemplo)));
end;
Según la tabla anterior el tamaño del record debería de ser de 5 bytes, pero sin embargo como veras en el mensaje es de 8. Esto es debido a la "optimización" que realiza el compilador. Y sin embargo:
Código Delphi [-]
var
  Ejemplo: packed record
    i: Integer;
    b: byte;
  end;
begin
  ShowMessage(IntToStr(Sizeof(Ejemplo)));
end;
Ahora el record si que mide 5 bytes, curioso ¿verdad?

kakarotv5 16-06-2007 11:43:49

Muchas gracias.


La franja horaria es GMT +2. Ahora son las 09:18:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi