Strano c errore di overflow #
-
23-08-2019 - |
Domanda
Qualcuno mi può spiegare il motivo di overflow variabile a? Si noti che B è più grande di 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 . . .
Grazie!
Soluzione
La parte destra è un int moltiplicazione perché ogni parte dell'espressione è un int. Solo perché è in fase assegnato a una lunga non significa che è eseguita con lunghi aritmetica.
modificarla in:
long a = 1024L * 1024 * 1024 * i;
e che funzionerà. (La differenza è la L all'estremità del primo 1024.)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow