7 votes

Étrange erreur de débordement en c#

Quelqu'un peut-il m'expliquer la raison du débordement de la variable a ? Notez que b est plus grand que a.

static void Main(string[] args)
{
     int i = 2;    
     long a = 1024 * 1024 * 1024 * i;
     long b = 12345678901234567;
     System.Console.WriteLine("{0}", a);
     System.Console.WriteLine("{0}", b);
     System.Console.WriteLine("{0}", long.MaxValue);
}

-2147483648
 12345678901234567
 9223372036854775807
 Press any key to continue . . .

Merci !

26voto

Jon Skeet Points 692016

L'ERS est un int la multiplication parce que chaque partie de l'expression est un int. Le fait qu'elle soit affectée à un long ne signifie pas qu'elle est exécutée avec une arithmétique longue.

Changez-le en :

long a = 1024L * 1024 * 1024 * i;

et ça marchera. (La différence est le L à la fin du premier 1024).

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