Ricerca…


Overflow intero

C'è una capacità massima che un numero intero può memorizzare. E quando supererai quel limite, tornerà al lato negativo. Per 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

Per tutti gli interi al di fuori di questo intervallo utilizzare lo spazio dei nomi System.Numerics che ha il tipo di dati BigInteger. Controlla sotto il link per maggiori informazioni https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

Overflow durante il funzionamento

L'overflow si verifica anche durante l'operazione. Nell'esempio seguente, x è un int , 1 è un int di default. Quindi l'aggiunta è un'aggiunta int . E il risultato sarà un int . E traboccherà.

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

Puoi evitarlo usando 1L. Ora 1 sarà long e l'aggiunta sarà una long aggiunta

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

Ordinare è importante

C'è overflow nel seguente codice

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

Mentre nel codice seguente non c'è overflow

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

Ciò è dovuto all'ordinamento da sinistra a destra delle operazioni. Nel primo frammento di codice x + x trabocca e dopo diventa long . D'altra parte x + 1L diventa long e dopo che x viene aggiunto a questo valore.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow