Странная ошибка переполнения c #
-
23-08-2019 - |
Вопрос
Кто-нибудь может объяснить мне причину переполнения переменной a?Обратите внимание, что b больше, чем 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 . . .
Спасибо!
Решение
RHS - это инт умножение, потому что каждая часть выражения является int.Просто потому, что он присваивается long, не означает, что он выполняется с помощью long-арифметики.
Измените его на:
long a = 1024L * 1024 * 1024 * i;
и это сработает.(Разница заключается в букве L в конце первых 1024.)
Не связан с StackOverflow