Skip to content

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.

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 solo int, 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.

Ecco come appare un numero con segno a 8-bit in complemento a due:

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_MAX e INT_MIN (Valori massimo e minimo di un int)
  • UINT_MAX (Valore massimo di un unsigned int)
  • SCHAR_MAX e SCHAR_MIN (Valori per un signed char)

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 uno 0).
  • Esadecimale (Base 16): 0xDEADBEEF (Inizia con 0x o 0X).
  • Suffissi: Puoi aggiungere U per indicare unsigned, L per long e LL per long long. Esempio: 71U o 18446744073709551615ULL.

Scrivi un programma che include <limits.h> e stampa il valore di INT_MAX.