[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 591.   C: «limits.h»

Il file limits.h della libreria standard definisce delle macro-variabili che riepilogano i limiti dei valori rappresentabili con le variabili scalari intere. Lo standard prescrive dei limiti minimi per la conformità, ma le realizzazioni comuni consentono mediamente di rappresentare valori più grandi (in senso assoluto), a parità di tipo di intero. Infatti, i limiti effettivi dipendono principalmente dalla dimensione della parola del microprocessore e dal modo in cui si rappresentano i valori negativi. Si può osservare che nelle architetture comuni, in cui i valori negativi si rappresentano con il complemento a due, il valore negativo più grande (in senso assoluto) di una variabile è pari a una unità in più rispetto al valore positivo massimo (per esempio il tipo signed char va solitamente da -128 a 127).

L'esempio proposto si riferisce a un'architettura a 32 bit con i valori negativi rappresentati attraverso il complemento a due.

#define CHAR_UNSIGNED   0

#define CHAR_BIT        8

#define SCHAR_MIN       (-0x80)
#define SCHAR_MAX         0x7F
#define UCHAR_MAX         0xFF

#ifdef CHAR_UNSIGNED
    #define CHAR_MIN    0
    #define CHAR_MAX    UCHAR_MAX
#else
    #define CHAR_MIN    SCHAR_MIN
    #define CHAR_MAX    SCHAR_MAX
#endif

#define MB_LEN_MAX      16

#define SHRT_MIN        (-0x8000)
#define SHRT_MAX          0x7FFF
#define USHRT_MAX         0xFFFF

#define INT_MIN         (-0x80000000)
#define INT_MAX           0x7FFFFFFF
#define UINT_MAX          0xFFFFFFFFU

#define LONG_MIN        (-0x80000000L)
#define LONG_MAX          0x7FFFFFFFL
#define ULONG_MAX         0xFFFFFFFFUL

#define LLONG_MIN       (-0x8000000000000000LL)
#define LLONG_MAX         0x7FFFFFFFFFFFFFFFLL
#define ULLONG_MAX        0xFFFFFFFFFFFFFFFFULL

Tabella 591.2. Macro-variabili standard per la rappresentazione dei limiti riferiti a variabili scalari intere.

Macro-variabile Descrizione
CHAR_BIT
Rappresenta la quantità di bit utilizzata per rappresentare il tipo char, con o senza segno. In altri termini è l'unità di memorizzazione più piccola con cui si può gestire l'insieme di caratteri minimo. Di norma si tratta di 8 bit.
SCHAR_MIN
SCHAR_MAX
Rappresentano il valore minimo e il valore massimo rappresentabile in una variabile signed char.
UCHAR_MAX
Rappresenta il valore massimo rappresentabile in una variabile unsigned char. Il valore minimo è zero.
CHAR_MIN
CHAR_MAX
Rappresentano il valore minimo e il valore massimo rappresentabile in una variabile char. Questi valori dipendono dal fatto che il tipo char sia da intendere equivalente a un tipo unsigned char o signed char, da cui ereditano i limiti.
MB_LEN_MAX
Rappresenta la quantità massima di byte che possono essere usati per rappresentare un carattere multibyte, qualunque sia la configurazione locale.
SHRT_MIN
SHRT_MAX
Rappresentano il valore minimo e il valore massimo rappresentabile in una variabile short int.
USHRT_MAX
Rappresenta il valore massimo rappresentabile in una variabile unsigned short int. Il valore minimo è zero.
INT_MIN
INT_MAX
Rappresentano il valore minimo e il valore massimo rappresentabile in una variabile int.
UINT_MAX
Rappresenta il valore massimo rappresentabile in una variabile unsigned int. Il valore minimo è zero.
LONG_MIN
LONG_MAX
Rappresentano il valore minimo e il valore massimo rappresentabile in una variabile long int.
ULONG_MAX
Rappresenta il valore massimo rappresentabile in una variabile unsigned long int. Il valore minimo è zero.
LLONG_MIN
LLONG_MAX
Rappresentano il valore minimo e il valore massimo rappresentabile in una variabile long long int.
ULLONG_MAX
Rappresenta il valore massimo rappresentabile in una variabile unsigned long long int. Il valore minimo è zero.

591.1   Confronto tra architetture

Per avere un'idea di come potrebbero svilupparsi i valori del file limits.h tra le varie architetture, viene mostrata una tabella in cui si possono paragonare quelli minimi stabiliti dallo standard con quelli usati nei sistemi GNU/Linux con architetture x86-32 e x86-64. Per semplicità si indicano solo i valori senza segno:

Macro-variabile Standard GNU/Linux x86-32 GNU/Linux x86-64
UCHAR_MAX
28-1 28-1 28-1
USHRT_MAX
216-1 216-1 216-1
UINT_MAX
216-1 232-1 232-1
ULONG_MAX
232-1 232-1 264-1
ULLONG_MAX
264-1 264-1 2128-1

591.2   Riferimenti


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome c_171_limits_h_187.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory