Estranho c erro # estouro
-
23-08-2019 - |
Pergunta
Alguém pode explicar-me a razão de transbordamento na variável um? Note-se que b é maior do que um.
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 . . .
Obrigado!
Solução
O RHS é uma int multiplicação porque cada parte da expressão é um int. Só porque ele está sendo atribuído a um longo não significa que ele é realizado com longa aritmética.
mude para:
long a = 1024L * 1024 * 1024 * i;
e ele vai trabalhar. (A diferença é o G na extremidade do primeiro 1024.)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow