Cours INF 1563 Programmation I
Laboratoire 5 Automne 2008L Les opérateurs
Prof. Ilham Benyahia
Objectifs du laboratoire
Se familiariser avec :
les opérateurs arithmétiques et bit par bit (bitwise)
les opérateurs relationnels
les opérateurs logiques booléens
la précédence des opérateurs
Connaître l’existence de la possibilité de résultats aux valeurs particulières :
zéro positif et zéro négatif, NaN (Not a Number),
résultats de la division par 0 et par 0.0, infinité positive et infinité négative
Opérateurs arithmétiques
- les quatre opérateurs binaires de calcul ( +, -, * et /)
- l’opérateur unitaire de négation (- )
- l’opérateur modulo ( % )
- les opérateurs combinés d’arithmétique et d’affectation ( =+, =-, =*, =/ )
- incrémentation et décrémentation ( ++ et --), versions pré et post
Exercice 1 : Créez une classe MathdeBase dont la principale tâche (au niveau du main) consiste à
utiliser chacun des opérateurs arithmétiques listés ci-haut pour initialiser les variables locaux.
Ensuite, procède à leur affichage après l’exécution des opérateurs. Variez votre utilisation des
types primitifs utilisés dans les expressions arithmétiques.
Références utiles :
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/arithmetic.html
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/assignment.html
Opérateurs bit par bit (bitwise)
Ces opérateurs permettent l’inspection et la modification individuelle des bits des types byte, char,
short, int et long. Ils peuvent aussi être combinés avec l’affectation.
- négation logique (~) , opérateur ET (&), opérateur OU (|), opérateur OU exclusif -XOR (^)
- décalage à gauche ( <<) ou à droite (>>), décalage sans extension de signe (>>>)
- mêmes opérateurs combinés avec l’affectation
Exercice 2.a : Examinez la classe BitLogic ci-bas, calculez manuellement les résultats affichés
par les println(), puis vérifiez vos réponses en exécutant le tout :
class BitLogic {
public static void main(String args[]) {
String binary[] = { "0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111"
};
int a = 3;
int b = 6;
int c = a | b;
int d = a & b;
int e = a ^ b;
int f = (~a & b) | (a & ~b);
int g = ~a & 0x0f;
System.out.println(" a = " + binary[a]);
System.out.println(" b = " + binary[b]);
System.out.println(" a|b = " + binary[c]);
System.out.println(" a&b = " + binary[d]);
System.out.println(" a^b = " + binary[e]);
System.out.println("~a&b|a&~b = " + binary[f]);
System.out.println(" ~a = " + binary[g]);
}
}
Exercice 2.b Ecrivez une expression pour inverser l’ordre des octets d’un short.
Par exemple, le short ‘0xabba’ devient ‘0xbaab’
Référence utile : http://java.sun.com/docs/books/tutorial/java/nutsandbolts/bitwise.html
Opérateurs relationnels
- L’opérateur d’égalité : égalité (= =) et inégalité (!=)
- Les opérateurs d’ordre : plus grand (>), plus grand ou égal (>=), plus petit (<), plus petit ou
égal (<=)
Exercice 3. Ces énoncés compilent-ils? Corrigez au besoin. Quelles sont les valeurs affichées ?
Integer a = new Integer(6);
Integer b = new Integer(6);
int c = 6, d = 10;
System.out.println("a == b -> " + (a == b));
System.out.println("b = b -> " + ( b = b));
System.out.println("a != b -> " + (a != b));
System.out.println("a < d -> " + (a < d));
System.out.println("a.intValue() == c -> " + (a.intValue() == c));
Référence utile : http://java.sun.com/docs/books/tutorial/java/nutsandbolts/relational.html
Opérateurs logiques booléens
- égalité (= =) et inégalité (!=)
- ET logique (&), OU logique (|), OU exclusif logique(XOR) (^)
- ET logique assigné (&=), OU logique assigné (|=), OU exclusif logique (XOR) assigné (^=)
- non logique (!) , si-alors-sinon (?: )
Exercice 4.a Utilisez l’opérateur ternaire dans une expression pour indiquer si un nombre
entier est pair ou impair.
Exercice 4.b Examinez la classe BoolLogic ci-bas, calculez manuellement les résultats
affichés par les println(), puis vérifiez vos réponses en exécutant le tout :
class BoolLogic {
public static void main(String args[]) {
boolean a = true;
boolean b = false;
boolean c = a | b;
boolean d = a & b;
boolean e = a ^ b;
boolean f = (!a & b) | (a & !b);
boolean g = !a;
System.out.println(" a = " + a);
System.out.println(" b = " + b);
System.out.println(" a|b = " + c);
System.out.println(" a&b = " + d);
System.out.println(" a^b = " + e);
System.out.println("!a&b|a&!b = " + f);
System.out.println(" !a = " + g);
}
}
Valeurs spéciales
zéro positif et zéro négatif
NaN (not a number), infinité positive et infinité négative
L’opérateur de séquençage ( , )
zéro positif, zéro négatif, NaN (Not a Number), infinité positive et infinité négative
division entière par 0, division réelle par 0.0
Exercice 5. Ce code compile-t-il ? Corrigez au besoin. S’exécute-t-il ? Quels seront les
résultats ?
int i = 0;
double j = 0.0, k = 0.0;
i = 1 / 0;
j = -1.0 / 0.0;
k = 0.0 / 0.0;
System.out.println("i = " + i);
System.out.println("j = " + j);
System.out.println("k = " + k);
System.out.println("Double.NaN == Double.NaN = " + (Double.NaN == Double.NaN));
System.out.println("Double.NaN != Double.NaN = " + (Double.NaN != Double.NaN));
System.out.println("Double.NaN != 0.0 = " + (Double.NaN != 0.0));
System.out.println("Double.NEGATIVE_INFINITY-1="+(Double.NEGATIVE_INFINITY-1));
System.out.println("Double.NEGATIVE_INFINITY+1="+(Double.NEGATIVE_INFINITY+1));
System.out.println("Double.NEGATIVE_INFINITY == Double.NEGATIVE_INFINITY+1" +
Double.NEGATIVE_INFINITY == Double.NEGATIVE_INFINITY+1);
System.out.println("Double.NEGATIVE_INFINITY++="+(Double.NEGATIVE_INFINITY++));
System.out.println("Double.POSITIVE_INFINITY"+ Double.POSITIVE_INFINITY);
System.out.println("Double.MAX_VALUE" + Double.MAX_VALUE );
System.out.println("Double.POSITIVE_INFINITY == Double.MAX_VALUE" +
(Double.POSITIVE_INFINITY == Double.MAX_VALUE));
System.out.println("1.0 / 0.0" + (1.0 / 0.0));
System.out.println("1.0 / -0.0" + (1.0 / -0.0));
System.out.println("0.0 == -0.0 = " + (0.0 == -0.0));
Référence utile : http://java.sun.com/developer/TechTips/1998/tt0722.html#tip2
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !