in C #, un tipo di dati int ha un valore massimo di 2.147.483.647 e un valore massimo flottante è 340282300000000000000000000000000000000
che cosa causa a questi tipi di dati i valori massimi, da dove provengono quei numeri?
Provengono dal fatto che questi tipi sono limitati a un certo numero di bit. Nel caso di 2.147.483.647, stiamo parlando di un valore firmato a 32 bit. Per 32 bit ci sono solo 4.294.967.294 combinazioni possibili di 1 e 0. La metà di queste rappresentazioni sarà negativa e metà sarà positiva. (Beh, in realtà uno di questi sarà 0, che non è né negativo né positivo, ma ottieni il punto.)
Diamo un'occhiata a un semplice esempio. Prendiamo un numero a 2 bit. Esistono 4 possibili combinazioni:
00 = 0
01 = 1
10 = 2
11 = 3
Possiamo avere 4 valori non negativi. Oppure, se vogliamo includere i negativi, possiamo avere 2 negativi, 0 e 1 positivi:
00 = 0
01 = 1
10 = -2
11 = -1
Per 3 bit, otteniamo:
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7
Per i valori firmati, otteniamo:
000 = 0
001 = 1
010 = 2
011 = 3
100 = -4
101 = -3
110 = -2
111 = -1
Per capire come vengono creati i valori negativi, puoi leggere l'articolo di Wikipedia sul formato di completamento 2s .
Comprendere la virgola mobile è più complicato, ma alla fine si riduce alla stessa ragione. Il numero di bit utilizzati per rappresentare il numero limita il numero di valori che possono essere rappresentati. (Se sei interessato leggi il IEEE 754 formato a virgola mobile.)
Perché questi tipi dovrebbero assumere una singola parola (sotto la maggior parte delle architetture), il che consente alle operazioni aritmetiche di essere estremamente veloci grazie al supporto a livello ISA. Puoi assolutamente creare un tipo "vero" intero o razionale (questo è l'approccio adottato da molti linguaggi funzionali e di scripting), ma questo potrebbe ridurre le prestazioni in alcuni programmi.
Leggi altre domande sui tag data-types