62 votes

Java Primitives de calcul

En java lors de la déclaration d'

short number=1024*1024*1024; 

il donne erreur de compilation mais

short number=1024*1024*1024*1024;

compile bien. pourquoi ce qui s'est passé?

72voto

Joey Points 148544

Le compilateur, dans ce cas, d'évaluer le calcul (car il ne contient que des constantes) et tentez d'affecter le résultat à la variable. Ce calcul est effectué avec le type int et seulement converti short lors de l'attribution, si possible.

Dans votre cas, le premier calcul est trop grand pour tenir dans un short (1073741824). La seconde va de dépassement de l' int et se retrouvent dans une gamme de short supports (0). Si l'affectation fonctionne dans ce cas.

Rappelez-vous, vous probablement ne voulez pas jamais compter sur ces choses dans le code.

11voto

Rahul Tripathi Points 1

Vous êtes confrontés au problème que votre numéro d'emballage autour.Dans le premier cas, il n'est pas autour, et donc il déborde la gamme de court. Mais dans le second cas, il s'enroule autour de après la calculationa et d'où il vient dans la gamme de court et si vous n'avez pas l'erreur de compilation.

Une perte de précision signifie que vous sont en train de perdre de l'information de la valeur donnée.(Le type de données court est un 16 bits signés en complément à deux entier. Il a une valeur minimale de de -32 768 et une valeur maximale de 32 767 (inclus).) Dans ton premier cas, la gamme de court-circuit est traversé(1073741824) et donc vous perdez l'information.

Un rétrécissement de la conversion d'un entier signé intégrante de type T supprime simplement les tous, mais le n le plus bas de l'ordre de bits, où n est le nombre de bits utilisés pour représenter le type T.

EDIT:-

De JLS §3.10.1(très correctement mentionnés dans cette question similaire)

C'est une erreur de compilation si une virgule littéral de type int est plus grande que 2147483648 (231), ou si la décimale littérale 2147483648 apparaît n'importe où autre que l'opérande de l'unaire moins de l'opérateur (§15.15.4).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X