문제

누군가가 가변 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는 an입니다 int 표현의 모든 부분이 int이기 때문에 곱셈. 오랫동안 할당된다고해서 긴 산술로 수행된다는 의미는 아닙니다.

변경 :

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

그리고 그것은 작동합니다. (차이점은 처음 1024의 끝에 L입니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top