erreur étrange c # trop-plein
-
23-08-2019 - |
Question
Quelqu'un peut-il me expliquer la raison d'un débordement dans la variable d'un? Notez que b est plus grand qu'un.
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!
La solution
L'ERS est un int multiplication parce que chaque partie de l'expression est un entier. Tout simplement parce qu'il est étant affecté à une longue ne signifie pas qu'il est réalisé avec l'arithmétique de long.
Changer à:
long a = 1024L * 1024 * 1024 * i;
et ça va marcher. (La différence est le L à la fin de la première 1024).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow