Pour le moment les exercices seront réalisés sur JSHELL.
Vous avez la possibilité de l’utiliser ligne à ligne ou en mode édition/exécution.
Exercices
Types entiers et opérations
-
écrire du code pour déclarer, initialiser :
-
un
int
avec une valeur négative -
un
int
avec une valeur positive -
un
int
valant0xFFFF
-
un
int
valant0xFFFFFFFF
-
un
int
valant107374757677
Vos conclusions?
-
-
Faites des expériences sur les opérations entières: tentez de manière systématique des valeurs simples et des valeurs extrèmes (et imprimez le résultat).
Il est important d’avoir de l’imagination pour tester des valeurs. Ceci devient très utile quand on doit tester systématiquement des applications.
virgule flottante: types et opérations
Faites des expériences avec des nombres flottants (float
ou double
)
et leurs opérations.
Essayer avec des nombres très grands, des nombres très petits. Faire des divisions par zéro.
operations impliquant des types différents
double montant = 22.1;
int taux = 10 ;
double resultat ;
resultat= // VOTRE CODE ICI
Votre code :
-
Calculer en appliquant cette formule (attention: ceci n’est pas du code java mais une description "classique" de formule mathématiques):
resultat = montant ÷ (1 + ((50 - taux) ÷ 1000))
Warning
|
Le programme doit afficher: 21.25 |
autres exercices sur des entiers
Faites des expériences avec la pre-incrémentation et la post-incrémentation
et les opérations composites comme *= += …
(plus tard faire expérimenter les opérations comme: &= <⇐ >>>=
)
Utiliser également les types byte
et short
.
type booléen et opérations rendant des booléens.
Faites des expériences avec des comparaisons et autres opérations qui rendent des valeurs booléenes.
Par exemple partez de :
public class TestCompare {
public static void main(String[] args) {
int x = 10 ;
int y = -1 ;
double valx = 10. ;
double valy = -1;
// VOTRE CODE
}
}
opérations "bit à bit" sur des entiers
(Pour révisions et approfondissements)
Ce point n'étant pas essentiel vous pouvez faire cet exercice plus tard dans le cadre de révisions:
-
faites des expériences avec la représentation binaire d’un entier
int ix
en invoquantInteger.toBinaryString(ix)
. (comme il n’y a pas d’alignement avec des zéros à gauche il faudra faire quelques efforts pour "visualiser" ces zéros). -
faites des expériences avec les opérations "bit à bit":
& | ~
compatibilités entre types
(Pour révisions et approfondissements)
Dans le code suivant :
int x;
short y = 0x7FF;
// VOTRE CODE ICI
-
affecter
y
àx
. -
déclarer une valeur de type
char
et de nomcar
et l’initialiser avec une valeur quelconque. -
affecter
car
àx
. -
essayer d’affecter
car
ày
: expliquer ce qui arrive.
Exemples
opérations sur les types entiers
int ix ;
//un "int" avec valeur négative
ix = -128 ;
//un "int" avec valeur positive
ix = 128 ;
//un "int" et valeur en hexadécimal 0xFFFF
ix = 0xFFFF ;
//idem et valeur 0xFFFFFFFF
ix = 0XFFFFFFFF ;
//un "int" avec valeur 107374757677
// ix = 107473757677 ; ne s'exécute pas
ix = 1074737576 ;
// experimentations sur des opérations
// Essayons des tests très divers
-ix ;
ix + 1 ;
ix + ix ;
ix * 2 ;
ix-12345 ;
// multiplication
1223456 * 2 ;
1223456 * -2 ;
-1223456 * -2 ;
// modulo
13%7;
-13%7;
13 % -7;
-13 % -7;
// division
13/7;
ix/-1;
0/ix;
int iy = 0 ;
ix/iy;
virgule flottante: types et opérations
Dans ces corrigés une petite anticipation: on utilise un message (entre guillemets) et on rajoute (par un signe plus) une valeur à ce message … nous verrons très rapidement une explication.
double val = 3.14;
double big = 6.02E23;
big * 2.;
123.4E-128D;
-1D / 0D;
10D / 3.;
2.7 - 3.;
2. % -3.;
-2. % 3.;
// valeurs particulières (petites et grandes)
double dx = 1.0E+308;
double dy = 1.0E-323;
"1.0E+308 + 1 :" + (dx + 1);
"1.0E-323 - 1 :" + (dy - 1);
"1.0E+308 + 2 :" + (dx + 2);
"1.0E+308 + 10 :" + (dx + 10);
"1.0E+308 + 1.0E+308 :" + (dx + dx);
"1.0E-323 - 1.0E-323 :" + (dy - dy);
"-1.0E-323 + 1.0E-323 :" + (-dy + dy);
// bien regarder celle-ci !
"-1.0E-323 / 100 :" + (-dy / 100.);
operations impliquant des types différents
double montant = 22.1;
int taux = 10 ;
// attention: la division doit se faire en arithmétique flottante !
double resultat = montant / (1 + ((50 -taux)/1000.0)) ;
// prière de conserver l'opération (50 - taux) en opération entière
// donc possible (((double) (50-taux)) /1000)
autres exercices sur des entiers
byte bx = 0X7F ;
short sx = 2048 ;
++bx;
bx--;
bx;
sx *= 2;
sx;
sx %= 777 ;
sx;
sx %= -111 ;
type booléen et opérations rendant des booléens.
int x = 10 ;
int y = -1 ;
double valx = 10. ;
double valy = -1;
x > y ;
x >= y ;
valx < valy ;
valx <= valy ;
x == y ;
valy != valx ;
x == valx ;
(x > y) && (x == valx);
(x <= y) && (x == valx);
(x == valx) || (x <= y);
! (x <= valx );
int max = x > y ? x : y ;
opérations "bit à bit" sur des entiers
// essayez d'aligner les résultats : pas de zéros en tête ici
// (c'est possible mais on a simplifié)....
"128 : " + Integer.toBinaryString(128);
"-128 : " + Integer.toBinaryString(-128);
"128>>2 : " + Integer.toBinaryString(128>>2);
"-128>>2 : " + Integer.toBinaryString(-128>>2);
"-128>>>2 : " + Integer.toBinaryString(-128>>>2);
"0xFFF : " + Integer.toBinaryString(0xFFF);
"0xFFF&0xFF : " + Integer.toBinaryString(0xFFF&0xFF);
compatibilités entre types
int x;
short y = 0x7FF;
x = y;
char car = 'A';
x = car; // on peut affecter un "char" à un "int"
// y = car ; ne marche pas !
// un "char" n'est pas affectable à un "short"
// même s'ils ont la même taille (2 octets)
// l'un est signé , l'autre pas