Comme expliqué en bref C# (mais aussi pour d'autres langues compilateurs ainsi, comme Java)
Il y a un prédéfini conversion implicite de court int, long, float, double, decimal.
Vous ne pouvez pas convertir implicitement non littérale types numériques de grande taille de stockage à court (voir partie Intégrante Types de Table pour les tailles de stockage de types intégraux). Considérons, par exemple, à la suite de deux courts variables x et y:
short x = 5, y = 12;
La suite de l'instruction d'affectation produira une erreur de compilation, en raison de l'expression arithmétique sur le côté droit de l'opérateur d'affectation est évaluée à int par défaut.
short z = x + y; // Error: no conversion from int to short
Pour résoudre ce problème, utilisez un plâtre:
short z = (short)(x + y); // OK: explicit conversion
Il est cependant possible d'utiliser les instructions suivantes, où la variable de destination a la même taille de stockage ou une plus grande taille de stockage:
int m = x + y;
long n = x + y;
Une bonne question qui suit est:
"pourquoi une expression arithmétique sur le côté droit de l'opérateur d'affectation est évaluée à int par défaut" ?
Une première réponse peut être trouvée dans:
La classification et Officiellement la Vérification Constante entière Pliage
Le langage Java spécification définit exactement comment les nombres entiers sont représentés et comment l'arithmétique des nombres entiers expressions sont évaluées. C'est une propriété importante de Java comme ce langage de programmation a été conçu pour être utilisé dans des applications distribuées sur Internet. Un programme Java est nécessaire pour produire le même résultat indépendamment de la machine cible de l'exécuter.
En revanche, C (et la majorité des plus largement utilisé impératif et
langages de programmation orientée objet) est plus bâclée et laisse de nombreuses caractéristiques importantes de l'ouvrir. L'intention derrière cette inexacte de la langue
la spécification est clair. Les mêmes programmes C sont censés fonctionner sur 16 bits,
32-bit, ou même de l'architecture 64 bits par l'instanciation de l'entier de l'arithmétique
la source de programmes avec les opérations arithmétiques intégré dans le processeur cible. Cela conduit à beaucoup plus d'un code efficace, car il peut utiliser le disponibles
la machine directement. Aussi longtemps que l'entier des calculs de traiter seulement
avec des chiffres être "suffisamment petits", des incohérences apparaissent.
En ce sens, le C arithmétique des nombres entiers est un espace réservé qui n'est pas défini exactement
par le langage de programmation spécification, mais n'est complètement instancié par la détermination de la machine cible.
Java définit précisément comment les entiers sont représentés et comment l'arithmétique des nombres entiers, est calculé.
Java Integers
--------------------------
Signed | Unsigned
--------------------------
long (64-bit) |
int (32-bit) |
short (16-bit) | char (16-bit)
byte (8-bit) |
Chevalier est le seul type entier non signé. Ses valeurs représentent des caractères Unicode, d' \u0000
de \uffff
, c'est à dire de 0 à 216-1.
Si un nombre entier opérateur a un opérande de type long, l'autre opérande est également convertie en type long. Sinon, l'opération est effectuée sur des opérandes de type int, si nécessaire, plus courte opérandes sont convertis en int. Les règles de conversion sont exactement spécifié.
[À partir de Notes Électroniques en Informatique Théorique, 82 N ° 2 (2003)
Blesner-Blech-COCV 2003: Sabine GLESNER, Jan Olaf BLECH,
Fakultät für Informatik,
Universität Karlsruhe
Karlsruhe, Allemagne]