C# Language
straripamento
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.