Dans l'exemple donné: retournera: Comment résoudre ce problème? p> p> c = -1183744630 code>, pourquoi? p>
5 Réponses :
Votre entier est débordant. Un entier a une valeur maximale de Une longue a une plus grande gamme. P> integer.max_value code> (2 ^ 31 - 1). Si la valeur devient plus grande, votre variable n'aura plus la bonne valeur. long a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);
@Scharrels - Et si cela doit rester entier?
S'il doit rester int, vous pouvez lancer la valeur longue à un entier, int newint = (int) c; code>. Bien que je ne suis pas totalement sûr que ce serait une bonne approche.
Vous ne pouvez pas mettre des valeurs cela grand dans un entier, alors vous êtes bloqué alors. Si vous devez faire une partie de vos calculs avec de grandes valeurs, ce qui deviendra de petite taille, jeté vos entiers à Longs, faites les calculs et les jeter. Cependant, soyez conscient que la valeur doit être plus petite que INTEGER.MAX_Value lorsque vous le renvoyez.
@reg: N'oubliez pas que dans les types intégraux Java sont toujours i> signés et que vous ne peut pas i> détecter le débordement sauf lorsque vous utilisez un plus grand type. C'est en conception et oui, dans certains cas, effectivement malheureux.
Mais comment puis-je prédire la grande variable devenue? Devrions-nous déclarer des variables «douteuses» (E.G. Solde du compte) aussi longtemps par défaut?
@ Mary.ja, c'est une décision spécifique au domaine. Si vous ne pouvez pas indiquer la taille de vos numéros, et une précision est nécessaire, vous devez utiliser un autre type de numéro au lieu des types indigènes. Je crois que BigDecimal est la suggestion typique pour cela.
Un Java Int est toujours 2 ^ 32-1 (défini par la langue). Votre déclaration de "typiquement 2 ^ 32 - 1" est incorrecte.
Un int en Java est signé, donc entier.max_value est 2 ^ 31 -1 non 2 ^ 32 -1
Je ne sais pas pourquoi il aurait besoin de coller à int code> s, mais gardez à l'esprit qu'un long code> est de seulement 8 octets, il est donc peu probable que vous ayez besoin de Évitez de les utiliser à cause des problèmes de mémoire.
La valeur maximale d'un Int en Java est de 2 147 483 647.
Lorsque vous souhaitez calculer quelque chose sur cette valeur, vous devez utiliser le type
Le type de données INT est un entier de complément de deux 3 de 32 bits. Il a une valeur minimale de -2 147,483 648 et une valeur maximale de 2 147 483 647 p> blockQuote>
Le max_value d'un Java Long est 9223372036854775807, la solution de Scharronches fonctionne pour votre exemple.
Voici une autre solution pouvant aller encore plus haut, si vous en avez besoin. P>
BigInteger a = new BigInteger(2111000333);
BigInteger b = new BigInteger(1000222333);
BigIntegerc = a.add(b);
System.out.println("c= " + c);
Je vérifierais si (b> long.max_value - a) code> avant de partir pour lourde biginteger code> objet.
long a, b, c;
a = 2111000333;
b = 1000222333;
if (b > LONG.MAX_VALUE - a) {
// a and b cannot be added.
}