수색…


정수 오버플로

정수가 저장할 수있는 최대 용량이 있습니다. 그리고 그 한도를 초과하면, 그것은 부정적인 측면으로 되돌아 갈 것입니다. int 경우 2147483647

int x = int.MaxValue;                //MaxValue is 2147483647
x = unchecked(x + 1);                //make operation explicitly unchecked so that the example also works when the check for arithmetic overflow/underflow is enabled in the project settings 
Console.WriteLine(x);                //Will print -2147483648
Console.WriteLine(int.MinValue);     //Same as Min value

이 범위를 벗어나는 정수의 경우 BigInteger 데이터 유형이있는 네임 스페이스 System.Numerics를 사용하십시오. 자세한 내용은 아래 링크를 클릭하십시오. https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

작동 중 오버플로

또한 오버플로는 작업 중에 발생합니다. 다음 예제에서 x는 int 이고 1은 기본적으로 int 입니다. 따라서 추가는 int 추가입니다. 결과는 int 입니다. 그리고 그것은 넘칠 것입니다.

int x = int.MaxValue;               //MaxValue is 2147483647
long y = x + 1;                     //It will be overflown
Console.WriteLine(y);               //Will print -2147483648
Console.WriteLine(int.MinValue);    //Same as Min value

1L을 사용하면이를 방지 할 수 있습니다. 이제 1은 long 지고 추가는 long 것입니다.

int x = int.MaxValue;               //MaxValue is 2147483647
long y = x + 1L;                    //It will be OK
Console.WriteLine(y);               //Will print 2147483648

주문 문제

다음 코드에서 오버플로가 있습니다.

int x = int.MaxValue;
Console.WriteLine(x + x + 1L);  //prints -1

반면 다음 코드에서는 오버플로가 발생하지 않습니다.

int x = int.MaxValue;
Console.WriteLine(x + 1L + x);  //prints 4294967295

이는 작업의 왼쪽에서 오른쪽 순서에 의한 것입니다. 첫 번째 코드 조각에서 x + x 오버플로되고 그 후에는 long 됩니다. 반면에 x + 1Llong 지고 그 후에 x 는이 값에 더해진다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow