8
votes

Comment réparer une erreur avec Ajout d'entiers en Java?

Dans l'exemple donné: xxx

retournera: c = -1183744630 , pourquoi?

Comment résoudre ce problème?


0 commentaires

5 Réponses :


11
votes

Votre entier est débordant. Un entier a une valeur maximale de integer.max_value code> (2 ^ 31 - 1). Si la valeur devient plus grande, votre variable n'aura plus la bonne valeur.

Une longue a une plus grande gamme. P>

long a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);


9 commentaires

@Scharrels - Et si cela doit rester entier?


S'il doit rester int, vous pouvez lancer la valeur longue à un entier, int newint = (int) c; . 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 signés et que vous ne peut pas 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 s, mais gardez à l'esprit qu'un long 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.



2
votes

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 long


0 commentaires

1
votes

DataTypes Java

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


0 commentaires

9
votes

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);


1 commentaires

Je vérifierais si (b> long.max_value - a) avant de partir pour lourde biginteger objet.



4
votes
long a, b, c;
a = 2111000333;
b = 1000222333;
if (b > LONG.MAX_VALUE - a) {
   // a and b cannot be added.
}

0 commentaires