Download Tema03_Tipos de datos

Document related concepts
no text concepts found
Transcript
Tipos de datos
Tema 3
Tipos de datos
• Especifican:
– un dominio (rango de valores)
– un conjunto de operaciones posibles
• Los compiladores asocian a cada tipo de
datos un tamaño en memoria y un tipo de
representación interna.
Sistema binario
• En el interior del ordenador los datos se
representan en binario.
• Sólo emplea los dígitos 0 y 1.
• Con N bits se pueden representar 2N
valores diferentes.
Tipos de datos
Java
Enteros
• Pueden ser:
– Byte
– Short
– Integer
– Long
• Internamente se representa en
complemento a dos
Literales enteros
• Literal es una especificación de un valor
concreto de un tipo de datos.
• Pueden expresarse:
– En decimal (base 10): 255
– En octal (base 8): 0377 (3x82 + 7x81 + 7x80 = 255)
– En hexadecimal (base 16): 0xFF
(15x160+15x161=255)
• Los literales enteros son de tipo int por defecto
• Un literal entero es de tipo long si va
acompañado del sufijo L
Byte
• Tipo de 8 bits con signo
• Rango de valores (-128, +127)
• Se debería evitar su utilización excepto para la
manipulación de bits
• Las variables byte se declaran utilizando la
palabra clave byte. Ejemplo:
byte a, b;
a=012; //valor octal 7 (10 en decimal)
b=10; //valor decimal
Short
• Tipo de 16 bits con signo
• Rango de valores (-32768, +32767)
• Actualmente es el tipo menos utilizado debido a
la desaparición de los ordenadores de 16 bits
• Las variables short se declaran utilizando la
palabra clave short. Ejemplo:
short a, b;
a=0xA; //valor hexadecimal A (10 en decimal)
b=10; //valor decimal
Integer
• Tipo de 32 bits con signo
• Rango de valores:
(-2.147.483.648, +2.147.483.647 )
• Es el tipo más utilizado para almacenar valores
enteros.
• Las variables int se declaran utilizando la palabra
clave int. Ejemplo:
int a, b;
a=0xA; //valor hexadecimal A (10 en decimal)
b=10; //valor decimal
Long
• Tipo de 64 bits con signo
• Rango de valores: (-9.223.372.036.854.775.808,
+9.223.372.036.854.775.807)
• Se utiliza cuando el tipo int no es lo
suficientemente grande como para guardar un
valor .
• Las variables long se declaran utilizando la
palabra clave long. Ejemplo:
long l;
l=10L;
Errores con enteros
• Desbordamiento
Enteros.java:6: possible loss of precision
found : int
required: byte
a=1200;
^
• División por cero. Se produce en tiempo de
ejecución cuando intentamos dividir un entero
entre cero.
Exception in thread "main"
java.lang.ArithmeticException: / by zero
Números reales
• También conocidos con números en coma
flotante.
• Tienen coma decimal.
• Pueden ser:
– Float
– Double
• Internamente se representan siguiendo el
estándar IEEE754
Literales reales
• Cadenas de dígitos con un punto decimal
123.45 0.0 0.01
• En notación científica
123e5 123E+5 12E-6
• Por defecto los literales reales representan
valores de tipo double
• Para representar un valor de tipo float, hemos
de usar el sufijo f o F.
123.45f 0.01F
Float
• Utiliza 32 bits para almacenar un valor (1
signo, 8 exponente y 23 mantisa).
• Las variables se declaran utilizando la
palabra float.
float a;
a=4.5f;
Double
• Utiliza 64 bits para almacenar un valor (1
signo, 11 exponente y 52 mantisa).
• Las variables se declaran utilizando la
palabra double.
double a;
a=4.5;
Literales de tipo caracter
• Valores entre comillas simples
‘a’, ‘b’, ‘c’, …, ‘A’, ‘B’, …, ‘1’, ‘2’, …, ‘+’, ‘*’, …
• Unicode (en hexadecimal) \u????
– Código de 16 bits
– http://www.unicode.org/
‘\u0061’ (letra ‘a’), ‘\u002b’ (signo más ‘+’)
• Secuencias de escape
‘\t’ tabulador, ‘\n’ avance de línea, ‘\”’
comillas dobles
Variables carácter
• Utilizan 16 bits para representar un valor
• Las variables se declaran utilizando la
palabra char
char sino, salto;
sino=‘s’; // o tambíen sino=‘\u0073’;
salto=‘\n’
• Cuando el el valor se introduce por
teclado no se ponen las comillas
Cadenas de caracteres
• Una cadena (String) es una secuencia de caracteres
• String no es un tipo primitivo, sino una clase predefinida
• Los literales de tipo String van entre comillas dobles
“Esto es una cadena”
• Las secuencias de escape se pueden introducir
formando parte de una cadena.
“Pepe\tGarcía Molinero\n”
• Concatenación de cadenas
“Pepe “+”García “+”Molinero”
“Total = “+ total
Boolean
• Pueden contener los valores True o False
• Las variables se declaran utilizando la
palabra boolean
boolean b;
b=true;
b=9>5 && 9<=9;
Identificadores en Java
• El primer carácter será una letra
(mayúscula o minúscula) o uno de estos
dos símbolos ‘_’ ‘$’
• http://elvex.ugr.es/decsai/java/pdf/2DVariables.pdf
Palabras clave
Palabras reservadas del lenguaje que no pueden ser utilizas como
identificadores.
Comentarios
• Sirven para documentar el código fuente
• No se compilan (no pasan al .class)
• Tipos:
– // de una sóla línea
– /* de múltiples líneas */
– //** de documentación */
Ámbito de las variables
• Dependiendo del lugar del programa
donde se declara la variable, esta tendrá
un ámbito.
• El ámbito es el espacio del programa
donde se puede utilizar esa variable.
Declaración de variables
• Operación que debemos realizar antes de
utilizar una variable.
• Pueden declararse:
– Fuera de los módulos del programa
class Programa {
public static int a, b;
public static void main(String[] args){
– Dentro de los módulos
• Al principio del módulo
• En otro lugar
Declaración de constantes
simbólicas
• final
Dentro de un método
• final static En la clase fuera de todos los métodos
class CElementosJava
{
final static int cte1=1;
void test()
{
final double cte2 = 3.14;
…
}
}
Conversión implícita
Un dato tipo byte se puede meter en cualquier tipo de
variable y un dato tipo double sólo se puede meter en
una variable de tipo double
Entrada por teclado
• Keyboard es una clase que no forma parte
de las API de Java.
• Se encuentra dentro del paquete cs1
• Contiene métodos estáticos que permiten
leer datos desde el teclado.
• Para llamar a los métodos de Keyboard:
– cs1.Keyboard.nombre_del_método()
Métodos de Keyboard
• readByte(), readShort(), readInt(),
readFloat(), readDouble(), readChar(),
readString()
• No tiene readBoolean()
Ejercicios
• Programa que pide dos números float y
devuelve su división exacta.
• Programa que pide un carácter y muestra
su código Unicode
Conversión explícita (cast)
• El operador cast fuerza a un dato,
variable o una expresión a convertirse a
un nuevo tipo de dato.
• (tipo de dato) expresión
• Ejemplo:
– (int) (5.0/2.4)  el resultado será entero
Tipo de datos del resultado de
una expresión numérica
• Si en una expresion numérica se utilizan
datos de diferentes tipos, el resultado de
la expresión es un dato del mayor tipo
• Ejemplos:
5/2.0 (int / double) el resultado es double
5f*2 (float * int) el resultado es float
Operadores aritméticos
Operadores relacionales
Operadores lógicos
Operador && (and)
c1
c2
c1 && c2
V
V
V
V
F
F
F
V
F
F
F
F
IES Galileo
35
Operador || (or)
c1
c2
c1 || c2
V
V
V
V
F
V
F
V
V
F
F
F
IES Galileo
36
Operador ! (not)
IES Galileo
c
!c
V
F
F
V
37
Operadores unarios
Operadores de asignación
• ++ -=
• Ejemplos:
a++;
--a;
a=a+b;
a+=b;
a*=b;
*=
/=
%= +=
-=
Operadores condicionales
La clase Keyboard
• No forma parte de las API de Java
• La utilizaremos para leer datos desde el
teclado
• La forma de llamar a los métodos de esta
clase es de la siguiente manera:
– cs1.Keyboard.readInt();
• cs1 la clase pertenece al paquete cs1
• Keyboard  nombre de la clase
• readInt()  nombre del método
KeyBoard
• Tiene métodos para leer por teclado cada
tipo de datos excepto los boolean.
–
–
–
–
–
–
byte b=cs1.Keyboard.readByte();
short s=cs1.Keyboard.readShort();
int i=cs1.Keyboard.readInt();
float f=cs1.Keyboard.readFloat();
double d=cs1.Keyboard.readDouble();
char c=cs1.Keyboard.readChar();
• También tiene un método para leer
cadenas
– String s=cs1.Keyboard.readString();
Keyboard: como funciona
Cuando en un programa que tiene que
leer por teclado un entero ponemos la
siguiente instrucción:
int n=cs1.KeyBoard.readInt();
1.El programa se detiene a la espera de que el
usuario teclee el entero y pulse INTRO.
2.Cuando esto ocurre el programa continua con
la siguiente instrucción.
• Normalmente se escribe un mensaje en
pantalla antes de utilizar Keyboard para
indicar al usuario que dato le está
pidiendo el programa que teclee.
Cadenas de caracteres: String
• No son tipos de datos (son objetos)
• Operador de concatenación:
String saludo = “Hola” + “ Pepe”;
Sytem.out.println(saludo); // “Hola Pepe”
• Operador de concatenación puede unir una cadena a
cualquier otro tipo o literal:
double sueldo = 1120.85;
String mensaje = “su sueldo es ” + sueldo;
String deletrear = ‘S’ + “ como sevilla”;
• ¡Uno de los operandos tiene que ser un String!
String badString = 13 + ‘S’;
Ejercicio
• Programa que pide dos números por
teclado y me dice cual de ellos es el
mayor (Utiliza el operador condicional).
• Programa que pide por teclado el precio
unitario y la cantidad comprada, y
responde el importe de la compra sin IVA y
con IVA (18%).
Operadores sobre caracteres
• Los caracteres se almacenan como números
enteros
• Se pueden hacer operaciones aritméticas sobre
los caracteres. El resultado es siempre un
entero.
char myChar=‘a’;
int resta = myChar – 32;
• Para volver a un carácter necesita hacer cast:
char myChar=‘a’;
myChar= (char) (myChar – 32); //nuevo valor ’A’
Prioridad de los operadores
1
()
2
+ - ++ -- ! (tipo) sgn/inc/dec/NO/casting
3
* / %
mult/div/resto
4
+ - +
ad/sust/concatenación
5
> >= < <=
mayor/menor
6
== !=
igual/distinto
7
^
O exclusiva
8
&&
Y lógica
9
||
O lógica
10 = += -= *= /= %=
paréntesis
asignación
Ejercicios
• Programa que lee por teclado el nombre
de una persona y su año de nacimiento
para mostrar en un mensaje el nombre y
los años que cumple este año.
• Programa que lee por teclado micrómetros
(m) y calcula los metros y Km
equivalentes. El símbolo de la micra  es
\u00B5 en Unicode. (El micrómetro o
micra es la unidad de longitud equivalente
a una millonésima parte de un metro)