-
Promotion en "long"
Salut!:D
En java, lors d'opération sur les types "byte","short" et "char" le résultat est converti en "int" pour éviter les débordements.
Pourquoi n'est-ce pas le cas avec les opérations entre "int" qui risque de déborder, pourquoi pas une promotion en "long"?
De même le résultat d'opérations entre "float" n'est pas promu en "double".
Merci de vos explications.:D
-
La conversion en "int" n'est pas forcément pour éviter le débordement...
C'est juste que "int" est le type par défaut pour les entiers, et je pense que byte + byte fait "int" car tous les processeurs sont au moins à 32 bits... (je suppose que le choix a été fait pour cela)
Par contre, float + float ça fait float, et pas double... Car float c'est 32 bits...
C'est une hypothèse...
Convertir les int en long multiplie par plus de 2 la manipulation sur un 32 bits...
EDIT: D'ailleurs, j'étais persuadé que java renvoyait une exception lors d'un débordement... En fait, non...
Code:
int k = Integer.MAX_VALUE + 1; // ça donne -2147483648
-
OK alors c'est juste une question d'optimisation pour les calculs au niveau du processeur.