Interi, Limiti e Costanti
Il C è un linguaggio di sistema, il che significa che ti dà un controllo enorme su come i numeri vengono salvati in memoria. Questo capitolo esplora i tipi aritmetici, iniziando dagli interi.
Signed e Unsigned
Section titled “Signed e Unsigned”Gli interi in C si dividono in due grandi famiglie:
- Signed (Con segno): Possono rappresentare numeri negativi, zero e positivi (es.
int,signed char). Di default, se scrivi soloint, il compilatore lo intende come con segno. - Unsigned (Senza segno): Possono rappresentare solo lo zero e i numeri positivi (es.
unsigned int).
Gli unsigned sono più semplici da gestire per il computer (usano il sistema binario puro), mentre per i numeri negativi i sistemi moderni usano una rappresentazione chiamata Complemento a Due.
Dato che un unsigned int non deve sprecare un bit per il segno (il bit più a sinistra), può immagazzinare un numero massimo positivo grande circa il doppio rispetto a un int normale.
Il Complemento a Due
Section titled “Il Complemento a Due”Ecco come appare un numero con segno a 8-bit in complemento a due:
I limiti: <limits.h>
Section titled “I limiti: <limits.h>”La dimensione esatta di un intero (es. 16 bit, 32 bit, 64 bit) dipende dall’architettura del tuo computer. Per scrivere codice portabile, il C fornisce la libreria <limits.h>, che contiene delle macro costanti con i valori massimi e minimi per la tua macchina.
Alcune macro famose:
INT_MAXeINT_MIN(Valori massimo e minimo di unint)UINT_MAX(Valore massimo di ununsigned int)SCHAR_MAXeSCHAR_MIN(Valori per unsigned char)
Costanti Intere (Literals)
Section titled “Costanti Intere (Literals)”Quando scrivi un numero nel codice, stai creando una “costante”. In C, puoi scrivere i numeri in diverse basi matematiche e aggiungere dei suffissi per forzarne il tipo:
- Decimale:
71(Inizia sempre con una cifra da 1 a 9). - Ottale (Base 8):
0777(Inizia sempre con uno0). - Esadecimale (Base 16):
0xDEADBEEF(Inizia con0xo0X). - Suffissi: Puoi aggiungere
Uper indicareunsigned,LperlongeLLperlong long. Esempio:71Uo18446744073709551615ULL.
💻 Esercizio Pratico
Section titled “💻 Esercizio Pratico”Scrivi un programma che include <limits.h> e stampa il valore di INT_MAX.