Странная ошибка переполнения в c # - PullRequest
7 голосов
/ 22 декабря 2008

Может кто-нибудь объяснить мне причину переполнения в переменной а? Обратите внимание, что 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 . . .

Спасибо! * * 1004

1 Ответ

26 голосов
/ 22 декабря 2008

RHS - это умножение int , потому что каждая часть выражения является целым числом. То, что он присваивается long, не означает, что он выполняется с длинной арифметикой.

Измените его на:

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

и это сработает. (Разница в L в конце первого 1024 года.)

...