¿De dónde viene el rango que admiten los diferentes tipos de datos en Java?

Iniciado por minicatsCB, 22 Agosto 2013, 17:23 PM

0 Miembros y 1 Visitante están viendo este tema.

minicatsCB

Hola. Estoy empezando con la programación desde sus inicios, su base, y me he decidido a aprender a programar en JAVA. Y leyendo un pequeño documento de iniciación me sale esta tabla.


Mis dudas son las siguientes:
1- ¿De dónde viene el rango de cada tipo de dato? No tengo idea si tiene que ver con los bits, los bytes, o algo...  :huh: (Esto es lo que más me interesaría saber).
2- ¿A qué se refiere la longitud (en la columna "long.") de "x" bytes?
3- ¿Y sobre el formato?
4- ¿Qué quiere decir con "s.p." y "d.p."? En la parte de datos tipo float y double.

Me gustaría saberlo por curiosidad, ya que al estar en el nivel en que estoy todavía no tengo conocimientos profundos sobre informática. Supongo que mientras más base tenga mejor, ¿no?  :)

Gracias.

1mpuls0

1. El rango son los valores numéricos máximos y mínimos que toma el tipo de dato.
Ejemplo:
Correcto - > byte myVariable = 127;
Incorrecto -> byte myVariable = 128;

Si se sobrepasa el valor máximo o mínimo permitido para el tipo de dato el editor marcará "possible loss of precision"

El rango depende de la cantidad de bytes asignados a ese tipo de datos.
Ejemplo:
1 byte = 8 bits
8 bits = 256

Código (sql) [Seleccionar]

+------+------------+-------+
| bit  | expression | value |
+------+------------+-------+
|    1 | 1^2        | 2     |
|    2 | 2^2        | 4     |
|    3 | 3^2        | 8     |
|    4 | 4^2        | 16    |
|    5 | 5^2        | 35    |
|    6 | 6^2        | 64    |
|    7 | 7^2        | 128   |
|    8 | 8^2        | 256   |
+------+------------+-------+


256 es el rango total, de aquí se toman negativos y positivos incluyendo el cero.
256 / 2 = 128 para negativos.
y quedan 127 para positvos



2. long es la el tamaño en memoria que se le asignó a ese tipo de dato.

3. El formato es el estándar de la IEEE para aritmética.

4. SP y DP se toma para tipos donde el valor puede ser de punto flotante es decir donde hay valores con decimales y se refiere a la exactitud.


Aquí un ejemplo que realicé en la uni.

Código (java) [Seleccionar]

/* Autor: Darhius929
* Realizar un programa para conocer los valores maximos y minimos de los tipos de dato.
* Tipos: byte, short, char, int, long, float, double.
*/

public class PrimitiveTypeSize {
   public static void main(String[] args) {
displaySize(Byte.TYPE, Byte.SIZE, Byte.MIN_VALUE, Byte.MAX_VALUE);
displaySize(Short.TYPE, Short.SIZE, Short.MIN_VALUE, Short.MAX_VALUE);
displaySize(Character.TYPE, Character.SIZE, (int) Character.MIN_VALUE, (int) Character.MAX_VALUE);
displaySize(Integer.TYPE, Integer.SIZE, Integer.MIN_VALUE, Integer.MAX_VALUE);
displaySize(Long.TYPE, Long.SIZE, Long.MIN_VALUE, Long.MAX_VALUE);
displaySize(Float.TYPE, Float.SIZE, Float.MIN_VALUE, Float.MAX_VALUE);
displaySize(Double.TYPE, Double.SIZE, Double.MIN_VALUE, Double.MAX_VALUE);
}

public static void displaySize(Class<?> type, int size, Number min, Number max) {
System.out.printf("Tipo:%-6s Tamano:%-2s Minimo:%-20s Maximo:%s\n", type, size, min, max);
}
}
abc

minicatsCB

Muchas gracias por tus respuestas!
Una duda en algo que has dicho (perdón por mi ignorancia pero nunca he dado esto).  :-\


CitarEl rango depende de la cantidad de bytes asignados a ese tipo de datos.
Ejemplo:
1 byte = 8 bits
8 bits = 256

¿Qué quiere decir exactamente que una cantidad de bytes este "asociado" a un tipo de datos? ¿Tiene algo que ver con la memoria, y ya también a esto de los llamados punteros (o algo así)? No sé si a lo mejor ya nos metemos a nivel de hardware.

Y con respecto a 8 bits=256, son 256 "qué". Me refiero a si no tiene alguna unidad.

Gracias de nuevo.  :)

1mpuls0

Los lenguajes de programación están basados en estándares.
Hay variaciones de nombre entre lenguajes por ejemplo en C# el equivalente a byte es sbyte pero en cuanto a tamaño son iguales.
Los tipos de datos están relacionados con la memoria porque es ahí donde se almacenarán los valores y de acuerdo al tipo de dato es el tamaño que se le asigna a esa variable.

http://msdn.microsoft.com/es-es/library/ms228360(v=vs.90).aspx

En este caso 256 se refiere al número decimal que se puede representar en 8 bits.
Pero como te comento estos 256 se reparten entre positivos, negativos y 0
abc

1mpuls0

Mira que sucede cuando sobrepasas el límite del tipo de dato.

Código (java) [Seleccionar]

public class PrimitivesDataTypes {
    public static void main(String args[]) {
        byte var = 127;
        var--;
        System.out.println(var);
       
        byte vbyte = 127;
        vbyte++;
        System.out.println(vbyte);
    }
}


Citar
run:
126
-128
BUILD SUCCESSFUL (total time: 0 seconds)
abc

trolleoatodos

1 haces  bien en empezar con JAVA
2 no te compliques tanto si no vas a hacer cálculos por bits
3 ¿con qué material estás aprendiendo?
4 darhius te ha respondido bien y con paciencia

minicatsCB

Hola, muchas gracias por responder!  :)
Buscando más información por internet he encontrado esto, lo dejo por si alguien visita el tema y le ayuda:



CitarEl sistema binario utiliza solamente dos dígitos ( 0 y 1 ) llamados bits. La palabra bit procede de la unión de las palabras binary digit.

Un bit es la unidad mínima de representación de información.
Utilizando 1 bit podremos solamente representar dos valores posibles: 0, 1.
Utilizando 2 bits podemos representar 4 valores: 00, 01, 10, 11.
Utilizando 3 bits podemos representar 8 valores: 000, 001, 010, 011, 100, 101, 110, 111.
Utilizando 4 bits podemos representar 16 valores:0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111.

En general, utilizando N bits podremos representar 2N valores.
Ocho bits forman un byte. El byte es la unidad básica de medida de la información.
Un byte es la cantidad más pequeña de información que el ordenador puede manejar. 

Con un byte se pueden representar 28 = 256 caracteres.
En el interior del ordenador los datos se transmiten y almacenan en grupos de bytes llamados palabras.
La longitud de palabra depende de cada tipo de ordenador: 8, 16, 32, 64.

La fuente es: http://puntocomnoesunlenguaje.blogspot.com.es


·· El material que estoy usando es un pequeño librillo que encontré en internet. Tiene una gran cantidad de información. Este de aquí:

http://es.scribd.com/doc/70377175/El-Lenguaje-de-Programacion-Java

·· Además lo estoy complementando con bastantes tutoriales y clases de internet que la verdad me ayudan bastante. Por ejemplo estos:

Este me está sirviendo muchísimo para afianzar.
[youtube=640,360]http://www.youtube.com/watch?v=4C1VZfvR0SM&list=PL4D956E5314B9C253[/youtube]

Con este empecé a utilizar el editor.
[youtube=640,360]http://www.youtube.com/watch?v=Z0F7sJaOQtw[/youtube]


1mpuls0

Si necesitas más información para entender el sistema binario y sus operaciones busca:

Matemáticas Discretas
Matemáticas para computadoras.
Lenguaje ensamblador.

Citar
Con un byte se pueden representar 28 = 256 caracteres.

Con respecto a este concepto te sugiero que tengas mucho cuidado por eso especifiqué.
Citar
En este caso 256 se refiere al número decimal que se puede representar en 8 bits.

porque si aplicamos el concepto que mencionas podria confundirse como:

Código (java) [Seleccionar]

byte var = 123456....n;


Dónde n sería el caracterer número 256.

Estrictamente hablando cuando el valor de un bit es 1 significa que hay un pulso eléctrico (nivel hardware) y el 0 representaría la ausencia de ese pulso.

En fin, ya no es tema para este subforo.

Saludos!
abc

~ Yoya ~

El espacio en memoria que ocupa un dato de tipo boolean no es 1bit, su tamaño no esta especificado ya que este varia dependiendo de la maquina virtual de java.

La "longitud" se refiere al espacio en memoria que va a ocupar dicho dato en la memoria RAM, tomando en cuenta que el manejo de memoria lo hace la maquina virtual de java. Hay que tener claro este tema, a la hora de programar para dispositivos con un hardware muy limitado.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

minicatsCB

Perdón si puedo cansar  :-\, pero centrándome en la tabla que indiqué al principio:

¿Por qué el rango del byte es de -127 a 128? Y entonces por ejemplo, no puede ser, qué decir, de -130 a 133, por ejemplo (sabiendo que está mal). ¿Tiene que ver con el hardware, con la parte de los bits, cuando hay corriente o no hay?
Es por si me conviene cambiar de subforo.


CitarEn este caso 256 se refiere al número decimal que se puede representar en 8 bits.

Es que no sé si capto bien el significado: con 8 bits se puede representar nada más que el número decimal 256. O que: con 8 bits, se pueden representar valores hasta el 256.  :-[

Una última cosa (porque creo que esta pregunta debería ir a otro subforo).
¿Qué me recomendáis para empezar en esto de la informática? Me refiero en profundidad, lo mismo que si estuviera estudiando la carrera. ¿Por dónde se empieza? Por hardware, con los sistemas binario, octal, hexadecimal... O directamente programación...

Gracias!