Szukaj…


Całkowitą przepełnienie

Jest maksymalna pojemność, którą może zapisać liczba całkowita. A kiedy przekroczysz ten limit, powróci on do ujemnej strony. Dla int jest to 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

W przypadku liczb całkowitych spoza tego zakresu należy użyć przestrzeni nazw System.Numerics, która ma typ danych BigInteger. Sprawdź poniższy link, aby uzyskać więcej informacji https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

Przepełnienie podczas pracy

Przepełnienie występuje również podczas operacji. W poniższym przykładzie x jest liczbą int , 1 jest domyślnie liczbą int . Dlatego dodatek jest int . Rezultatem będzie int . I to się przepełni.

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

Można temu zapobiec, używając 1L. Teraz 1 będzie long a dodatek będzie long dodatkiem

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

Zamówienia są ważne

W poniższym kodzie występuje przepełnienie

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

Podczas gdy w poniższym kodzie nie ma przepełnienia

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

Wynika to z uporządkowania operacji od lewej do prawej. W pierwszym kodzie fragment x + x przelewa się, a następnie staje się long . Z drugiej strony x + 1L staje się long a następnie x jest dodawane do tej wartości.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow