수색…
정수 오버플로
정수가 저장할 수있는 최대 용량이 있습니다. 그리고 그 한도를 초과하면, 그것은 부정적인 측면으로 되돌아 갈 것입니다. 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 + 1L
은 long
지고 그 후에 x
는이 값에 더해진다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow