Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Operandos
Tema 4 Fase 1
Programacin Electrnica 2
Agenda
Introduccin Clasificacin
i. ii. iii. iv. v. vi. vii. viii. ix. x. xi. Operador asignacin Operadores aritmticos Operadores aritmticos incrementales Operadores aritmticos combinados Operadores de relacin Operadores lgicos o booleanos Operador condicional Operadores de bit Operador concatenacin de cadenas Separadores Prioridad entre operadores
Programacin Electrnica 2
Introduccin
Programacin Electrnica 2
Los programas constan de datos, sentencias y expresiones. Las expresiones normalmente representan una ecuacin:
3 * x + 5 * z
En sntesis, una expresin es una secuencia de operaciones y operandos que especifica un clculo
Programacin Electrnica 2
Programacin Electrnica 2
Clasificacin:
i. ii. iii. iv. v. vi. vii. viii. ix.
Operador asignacin Operadores aritmticos Operadores aritmticos incrementales Operadores aritmticos combinados Operadores de relacin Operadores lgicos o booleanos Operador condicional Operadores de bit Operador concatenacin de cadenas
Programacin Electrnica 2
Operador Asignacin
Programacin Electrnica 2
El operador asignacin ( = ) es un operador binario que asigna el valor del trmino de la derecha al operando de la izquierda. El operando de la izquierda suele ser el identificador de una variable. El trmino de la derecha es, en general, una expresin de un tipo de dato compatible, en particular puede ser una constante u otra variable. Como caso particular, y a diferencia de los dems operadores, este operador no se evala devolviendo un determinado valor
Programacin Electrnica 2
Operador =
Ejemplo n = 4
Resultado n vale 4
No debe confundirse el operador asignacin (=) con el operador relacional de igualdad (= =). Java dispone de otros operadores que combinan la asignacin con otras operaciones (operadores aritmticos combinados).
Programacin Electrnica 2
10
Ejemplo 1.
Uso del operador asignacin con datos de distintos tipos:
: public class opAsignacion { public static void main(String[] args) { Pantalla int i,j; double x; i = 15 Uso del operador asignacin char c; j = 15 boolean b; String s; x = 12.345 i = 15; c=A j = i; b = false x = 12.345; c = 'A'; s = Hola b = false; s = "Hola"; System.out.println("i = " + i); System.out.println("j = " + j); System.out.println("x = " + x); System.out.println("c = " + c); System.out.println("b = " + b); System.out.println("s = " + s); } }
Programacin Electrnica 2
11
Operadores Aritmticos
Programacin Electrnica 2
12
Java tiene varios operadores aritmticos para los datos numricos enteros y reales segn se muestra en la tabla:
Operador
Descripcin operador unario de cambio de signo Suma Resta Producto Divisin (tanto entera como real) Resto de la divisin entera
+ * / %
Programacin Electrnica 2
13
El resultado exacto depende de los tipos de operando involucrados. Es conveniente tener en cuenta las siguientes peculiaridades:
El resultado es de tipo long si, al menos, uno de los operandos es de tipo long y ninguno es real (float o double). El resultado es de tipo int si ninguno de los operandos es de tipo long y tampoco es real (float o double). El resultado es de tipo double si, al menos, uno de los operandos es de tipo double. El resultado es de tipo float si, al menos, uno de los operandos es de tipo float y ninguno es double.
Programacin Electrnica 2
14
Ejemplo 2.
* Operandos enteros: i=7; j=3 Operador suma: i + j = 10 Operador resta: i - j = 4 Operador producto: i * j = 21 Uso de todos los operadores aritmticos: Operador division:i / j = 2 Operador resto: i % j = 1 Pantalla : * Operandos reales:a = 12.5 ; b = 4.3 public class OpAritmeticos { Operador suma: a + b = 16.8 public static void main(String[] args) { Operador resta: a - b = 8.2 int i,j; Operador producto: a * b = 53.75 double a,b; Operador division:a / b = 2.906976744186047 Uso de los operadores aritmticos i = 7; Operador resto: a % b = 3.9000000000000004 j = 3; System.out.println(* Operandos enteros: i = " + i + " ; j = " + j); System.out.println( Operador suma: i + j = " + (i+j)); System.out.println( Operador resta: i - j = " + (i-j)); System.out.println( Operador producto: i * j = " + (i*j)); System.out.println( Operador division: i / j = " + (i/j)); System.out.println( Operador resto: i % j = " + (i%j)); a = 12.5; b = 4.3; System.out.println("* Operandos reales: a = " + a + " ; b = " + b); System.out.println( Operador suma: a + b = " + (a+b)); System.out.println( Operador resta: a - b = " + (a-b)); System.out.println( Operador producto: a * b = " + (a*b)); System.out.println( Operador division: a / b = " + (a/b)); System.out.println( Operador resto: a % b = " + (a%b)); } }
Programacin Electrnica 2
15
Programacin Electrnica 2
16
Son operadores unarios (un nico operando). El operando puede ser numrico o de tipo char y el resultado es del mismo tipo que el operando. Estos operadores pueden emplearse de dos formas dependiendo de su posicin con respecto al operando:
Operador Incremento:
n++ = n+1 ++n = n+1
4++ ++4 a=5; b=a++; a=5; b=++a; 5 5 a vale 5 b vale 5 y a vale 6 a vale 5 a vale 6 y b vale 6
Descripcin
Ejemplo
Resultado
++
i++ primero se utiliza la variable y luego se incrementa su valor ++i primero se incrementa el valor de la variable y luego se utiliza.
4-3 -- operadores Decremento (similar al anterior) Estos suelen sustituir a veces al operador asignacin y tambin suelen aparecer en bucles for.
Programacin Electrnica 2
Ejemplo 3.
Uso de todos los operadores incrementales:
Pantalla
: class opIncrementales { public static void main(String[] args) { int i,j; // Variables enteras. Podrian ser reales o char i = 7; System.out.println("* Operando entero: i = " + i + ";"); System.out.println(" Operador ++: j = i++; "); j = i++; System.out.println(" // i vale " + i + "; j vale " + j); i = 7; System.out.println(" i = " + i + ";"); System.out.println(" j = ++i; "); Uso de los operadores incrementales j = ++i; System.out.println(" // i vale " + i + "; j vale " + j); i = 7; System.out.println("* Operando entero: i = " + i + ";"); System.out.println(" Operador --: j = i--; "); j = i--; System.out.println(" // i vale " + i + "; j vale " + j); i = 7; System.out.println(" i = " + i + ";"); System.out.println(" j = --i; "); j = --i; System.out.println(" // i vale " + i + "; j vale " + j); } } Ing. Mario Urrutia Espinoza
* Operando entero: i = 7; Operador ++: j = i++; // i vale 8; j vale 7 i = 7; j = ++i; // i vale 8; j vale 8 * Operando entero: i = 7; Operador - -: j = i - -; // i vale 6; j vale 7 i = 7; j = - -i; // i vale 6; j vale 6
17
Programacin Electrnica 2
18
Programacin Electrnica 2
19
Combinan un operador aritmtico con el operador asignacin. Como en el caso de los operadores aritmticos pueden tener operandos numricos enteros o reales y el tipo especfico de resultado numrico depender del tipo de stos.
Operador += -= *= /= %=
Descripcin Suma combinada Resta combinada Producto combinado Divisin combinada Resto combinado
Ejemplo a+=b a-=b a*=b a/=b a%=b a=a+b a=a-b a=a*b a=a/b a=a%b
Resultado
Programacin Electrnica 2
20
Ejemplo 4.
Pantalla
: public class OpCombinados { public static void main(String[] args) { Uso de los operadores aritmticos int i,j;// Variables enteras. Podrian ser reales i = 7; combinados j = 3; System.out.println("* Operandos enteros: i = "+ i +" ; j = "+ j); i += j; System.out.println(" Suma combinada: i += j " + " // i vale " + i); i = 7; i -= j; System.out.println(" Resta combinada: i -= j " + " // i vale " + i); i = 7; i *= j; System.out.println(" Producto combinado: i *= j " + " // i vale " + i); i = 7; i /= j; System.out.println(" Division combinada: i /= j " + " // i vale " + i); i = 7; i %= j; System.out.println(" Resto combinada: i %= j " + " // i vale " + i); } }
* Operandos enteros: Suma combinada:i += j Resta combinada:i -= j Producto combinado: Division combinada: Resto combinada:i %= j
Programacin Electrnica 2
21
Operadores de Relacin
Programacin Electrnica 2
22
Realizan comparaciones entre datos compatibles de tipos primitivos (numricos, carcter y booleanos) teniendo siempre un resultado booleano. Los operandos booleanos slo pueden emplear los operadores de igualdad y desigualdad.
Todos los valores numricos que se comparan con NaN dan como resultado false excepto el operador != que devuelve true. Esto ocurre incluso si ambos valores son NaN
Operador Descripcin = = igual que != distinto que < > <= >= menor que mayor que menor o igual que mayor o igual que
Ejemplo 7 = = 38 'a' != 'k' 'G' < 'B' 'b' > 'a' 7.5 <= 7.38 38 >= 7
Programacin Electrnica 2
23
Ejemplo 5.
Uso de todos los operadores de relacin:
: public class OpRelacionales { public static void main(String[] args) { int i,j; i = 7; j = 3; System.out.println("* Operandos enteros: i = "+ System.out.println(" Operador igualdad: i == j System.out.println(" Operador desigualdad: i != j System.out.println(" Operador mayor que: i > j System.out.println(" Operador menor que: i < j System.out.println(" Operador mayor o igual que: i System.out.println(" Operador menor o igual que: i } }
Pantalla
* Operandos enteros: Operador igualdad: Operador desigualdad: Operador mayor que: Operador menor que: Operador mayor o igual que: Operador menor o igual que: i +" es " es " es " es " >= j <= j i=7;j=3 i == j es false i != j es true i > j es true i < j es false i >= j es true i <= j es false
; j = "+ j); + (i==j)); + (i!=j)); + (i>j)); + (i<j)); es " + (i>=j)); es " + (i<=j));
Programacin Electrnica 2
24
Programacin Electrnica 2
25
Realizan operaciones sobre datos booleanos y tienen como resultado un valor booleano.
Descripcin
Ejemplo
Resultado true false true true true true false false true true false false
!false !(5==5) true | false Suma lgica OR (binario) (5==5)|(5<4) true ^ false Suma lgica exclusiva XOR (binario) (5==5)|(5<4) true & false Producto lgico AND (binario) (5==5)&(5<4) Suma lgica con cortocircuito: si el primer operando es true entonces true || false (5==5)||(5<4) el segundo se salta y el resultado es true Producto lgico con cortocircuito: si el primer operando es false entonces el segundo se salta y el resultado es false false && true (5==5)&&(5<4)
Para mejorar el rendimiento de ejecucin del cdigo es recomendable emplear en las expresiones booleanas el operador && en lugar del operador &. En este caso es conveniente situar la condicin ms propensa a ser falsa en el trmino de la izquierda. Esta tcnica puede reducir el tiempo de ejecucin del programa. De igual forma es preferible emplear el operador || al operador |. En este caso es conveniente colocar la condicin ms propensa a ser verdadera en el trmino de la izquierda
Programacin Electrnica 2
Ejemplo 6.
Uso de todos los operadores lgicos o booleanos:
Pantalla
: public class OpBooleanos { public static void main(String [] args) { System.out.println("Demostracion de operadores logicos"); System.out.println("Negacion: ! false es : " + (! false)); System.out.println( ! true es : " + (! true)); System.out.println("Suma: false | false es : " + (false | false)); System.out.println(" false | true es : " + (false | true)); System.out.println(" true | false es : " + (true | false)); System.out.println(" true | true es : " + (true | true)); System.out.println("Producto: false & false es : " + (false & false)); System.out.println(" false & true es : " + (false & true)); System.out.println(" true & false es : " + (true & false)); System.out.println(" true & true es : " + (true & true)); } }
Demostracion de operadores logicos Negacion: ! false es : true ! true es : false Suma: false | false es : false false | true es : true true | false es : true true | true es : true Producto: false & false es : false false & true es : false true & false es : false true & true es : true
26
Programacin Electrnica 2
27
Operador Condicional
Programacin Electrnica 2
28
Si el resultado de evaluar expresinLgica es verdadero, devuelve el valor de la primera expresin, caso contrario, devuelve el valor de la segunda expresin.
Operador ?: Descripcin operador condicional Ejemplo a = 4; b = a = = 4 ? a+5 : 6-a; b = a > 4 ? a*7 : a+8; Resultado b vale 9 b vale 12
La sentencia de asignacin:
valor = (expresionLogica ? expresion_1 : expresion_2);
Programacin Electrnica 2
29
Ejemplo 7.
Uso del operador condicional:
: public class opCondicional { public static void main(String[] args) { int i,j,k; i = 1; j = 2; k = i > j ? 2*i : 3*j+1; System.out.println("i = " + i); System.out.println("j = " + j); System.out.println("k = " + k); i = 2; j = 1; k = i > j ? 2*i : 3*j+1; System.out.println("i = " + i); System.out.println("j = " + j); System.out.println("k = " + k); } }
Pantalla
i=1 j=2 k=7 i=2 j=1 k=4
Programacin Electrnica 2
30
Operadores de bit
Programacin Electrnica 2
31
Tienen operandos de tipo entero (o char) y un resultado de tipo entero. Realizan operaciones con dgitos (ceros y unos) de la representacin binaria de los operandos.
Operador ~ | ^ & << Descripcin Negacin complemento binario (unario) Suma lgica binaria OR (binario) Suma lgica exclusiva XOR (binario) Producto lgico binario AND (binario) Desplaza a la izquierda los bits del 1 operando tantas veces como indica el 2 operando (por la derecha siempre entra un cero) Desplaza a la derecha los bits del 1 operando tantas veces como indica el 2 operando (por la izquierda entra
siempre el mismo bit ms significativo anterior)
Ejemplo
~12 12|10 12^10 12&10 7<<2 -7<<2 7>>2 -7>>2 7>>>2 -7>>>2
Resultado
-13 14 6 8 28 -28 1 -2 1 1073741822
>> >>>
Desplaza a la derecha los bits del 1 operando tantas veces como indica el 2 operando sin signo (por la
izquierda entra siempre un cero).
Programacin Electrnica 2
* Operandos enteros: i = 12 ; j = 10 32 Negacion o complemento: ~i es -13 Suma logica (binaria): i | j es 8 Suma exclusiva (binaria): i ^ j es 6 Producto logico (binaria): i & j es 14 * Operandos enteros: i = 12 ; j = -10 Negacion o complemento: ~i es -13 Suma logica (binaria): i | j es 4 : Uso de todos los operadores de bits: Suma exclusiva (binaria): i ^ j es -6 public class OpBitEnteros2 { Pantalla Producto logico (binaria): i & j es -2 public static void main(String[] args) { int i,j; * Operandos enteros: i=7;j=2 i = 12; Despl. a izquierdas: i << j es 28 j = 10; Despl. a derechas:i >> j es 1 System.out.println(* Operandos enteros: i = " + Despl. i + " a;derechas j = " +sin j); signo: i >>> j es 1 System.out.println( Negacion o complemento: ~i * es " + (~i)); Operandos enteros: i = -7 ; j = 2 System.out.println( Suma logica (binaria): i | j es " + (i|j)); Desplazamiento a izquierdas: i << j es -28 System.out.println( Suma exclusiva (binaria): i ^ j es " + (i^j)); Despl. a derechas:i >> j es -2 System.out.println( Producto logico (binaria):i & j es " + (i&j)); Despl. a derechas sin signo: i >>> j es 1073741822 i = 12;
Ejemplo 8.
j = -10; System.out.println(* Operandos enteros: i = " + i + " ; j = " + j); System.out.println( Negacion o complemento: ~i es " + (~i)); System.out.println( Suma logica (binaria): i | j es " + (i|j)); System.out.println( Suma exclusiva (binaria): i ^ j es " + (i^j)); System.out.println( Producto logico (binaria):i & j es " + (i&j)); i = 7; j = 2; System.out.println(* Operandos enteros: i = " + i + " ; j = " + j); System.out.println( Despl. a izquierdas: i << j es " + (i<<j)); System.out.println( Despl. a derechas: i >> j es " + (i>>j)); System.out.println( Despl. a derechas sin signo: i >>> j es " + (i>>>j)); i = -7; j = 2; System.out.println(* Operandos enteros: i = " + i + " ; j = " + j); System.out.println( Desplazamiento a izquierdas: i << j es " + (i<<j)); System.out.println( Despl. a derechas: i >> j es "+ (i>>j)); System.out.println( Despl. a derechas sin signo: i >>> j es " + (i>>>j));
} }
Programacin Electrnica 2
33
Programacin Electrnica 2
34
El operador concatenacin ( + ) es un operador binario que devuelve una cadena resultado de concatenar las dos cadenas que actan como operandos. Si slo uno de los operandos es de tipo cadena, el otro operando se convierte implcitamente en tipo cadena
Operador +
Resultado HolaJuan
Programacin Electrnica 2
35
Separadores
Programacin Electrnica 2
36
Existen algunos caracteres que tienen un significado especial y que se resumen a continuacin:
Descripcin Permiten modificar la prioridad de una expresin, contener expresiones para el control de flujo y realizar conversiones de tipo. Por otro lado pueden contener la lista de parmetros o argumentos, tanto en la definicin de un mtodo como en la llamada al mismo. Permiten definir bloques de cdigo y mbitos y contener los valores iniciales de las variables array Permiten declarar variables de tipo array (vectores o matrices) y referenciar sus elementos Permite separar sentencias Permite separar identificadores consecutivos en la declaracin de variables y en las listas de parmetros. Tambin se emplea para encadenar sentencias dentro de un bucle for Permite separar el nombre de un atributo o mtodo de su instancia de referencia. Tambin separa el identificador de un paquete de los subpaquetes y clases
Separador ()
{} [] ; ,
Programacin Electrnica 2
37
Programacin Electrnica 2
38
Una expresin es una combinacin de operadores y operandos que se evala generndose un nico resultado de un tipo determinado. Si dos operadores se encuentran en la misma expresin, el orden en el que se evalan puede determinar el valor de la expresin. En la siguiente tabla se muestra el orden o prioridad en el que se ejecutan los operadores que se encuentren en la misma sentencia. Los operadores de la misma prioridad se evalan de izquierda a derecha dentro de la expresin.
Programacin Electrnica 2 ++ 1
-+, ~ (tipo) *, /, % +, + << >> >>> <, <= >, >= instanceof == = == = & & ^ ^ | | && || ? : = *=, /=, %= +=, -= <<=, >>= >>>= &=, ^=, |=
Aritmtico Aritmtico Aritmtico Integral Booleano Cualquiera Aritmtico Aritmtico Cadena Integral Integral Integral Aritmtico Aritmtico Objeto, tipo Primitivo Primitivo Objeto Objeto Integral Booleano Integral Booleano Integral Booleano Booleano Booleano Booleano, cualquiera, cualquiera Variable, cualquiera
Incremento previo o posterior (unario) Incremento previo o posterior (unario) Suma unaria, Resta unaria Cambio de bits (unario) Negacin (unario)
39
2 3 4 5
Multiplicacin, divisin, resto Suma, resta Concatenacin de cadenas Desplazamiento de bits a izquierda Desplazamiento de bits a derecha con inclusin de signo Desplazamiento de bits a derecha con inclusin de cero Menor que, Menor o igual que Mayor que, Mayor o igual que Comparacin de tipos Igual (valores idnticos) Desigual (valores diferentes) Igual (referencia al mismo objeto) Desigual (referencia a distintos objetos) Cambio de bits AND Producto booleano Cambio de bits XOR Suma exclusiva booleana Cambio de bits OR Suma booleana AND condicional OR condicional Operador condicional (ternario)
8 9 10 11 12 13
14
Programacin Electrnica 2
40
Programacin Electrnica 2
41
Ejemplo:
Evale la siguiente sentencia, considerando que est trabajando con nmeros enteros::
A = - 3 + 5 + 2 * 4 6 / 4 * 3 5 % 2 Aplica operador unario a 3, entonces: -3 Luego, de izquierda a derecha: 2 * 4 = 8 Luego 6 / 4 = 1, que multiplicado por 3 = 3 Luego 5 % 2 = 1
Programacin Electrnica 2
42
Tareas
Programacin Electrnica 2
43
Ejercicio 1.
Escriba un programa que solicite al usuario una cantidad en segundos y la convierta a das, horas, minutos y segundos. Nota : El dato solicitado es entero
Planteamiento: Tras solicitar el nmero de segundos, el programa debe dividir sucesivamente el dato entre 60, para obtener los minutos, entre 60 para obtener las horas y entre 24 para obtener los das
Programacin Electrnica 2
44
Ejercicio 2.
Escriba un programa que solicite al usuario el lado de un tringulo equiltero y calcule el permetro y el rea. Nota : los datos solicitados puede que sean reales y el resultado debe presentarse con precisin de 2 dgitos
Planteamiento: Tras solicitar el lado que pueda que sea un nmero real, se calcula el permetros como tres veces el lado. Para calcular el rea se necesita la base, que es el lado, y la altura, que se obtiene usando el teorema de Pitgoras entre un lado y la mitad de la base. Para ello debe usar la operacin raz cuadrada que en Java se encuentra en la librera Math , la cual se carga automticamente. La sintaxis es: Math.sqrt().