Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

Les types entiers de largeur exacte

La librairie stdint.h Les types least et fast


Entête à inclure

#include <stdint.h>  // <cstdint> en C++

Types intN_t et uintN_t

Les types de largeur exacte permettent de demander explicitement un entier de 8, 16, 32 ou 64 bits. Le préfixe int correspond à une valeur signée, alors que le préfixe uint correspond à une valeur non signée.

Type Largeur Description
int8_t / uint8_t 8 bits Petits entiers, octets, composantes de couleur ou données binaires.
int16_t / uint16_t 16 bits Valeurs courtes, formats binaires ou protocoles imposant deux octets.
int32_t / uint32_t 32 bits Entiers de taille fixe très utilisés dans les formats de fichiers et les protocoles.
int64_t / uint64_t 64 bits Grandes valeurs entières, identifiants, compteurs ou masques étendus.

Ces types ne sont pas simplement des alias de confort : ils documentent l'intention du code. Si vous écrivez un fichier binaire dans lequel un champ doit occuper exactement 32 bits, uint32_t est plus explicite que unsigned int, dont la taille reste dépendante de la plate-forme.

L'exemple suivant stocke des informations de taille fixe dans plusieurs variables typées par <stdint.h>.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

int main() {

    uint8_t red = 255;
    uint8_t green = 128;
    uint8_t blue = 64;
    int32_t offset = -2048;
    uint64_t identifier = UINT64_C( 1234567890123456789 );

    printf( "rgb == (%u, %u, %u)\n", (unsigned int) red, (unsigned int) green, (unsigned int) blue );
    printf( "offset == %ld\n", (long) offset );
    printf( "identifier == %llu\n", (unsigned long long) identifier );

    return EXIT_SUCCESS;
}
Utilisation de types de largeur exacte

Les résultats produits par cet exemple sont :

rgb == (255, 128, 64)
offset == -2048
identifier == 1234567890123456789
Les types int8_t, int16_t, int32_t, int64_t et leurs équivalents non signés ne sont définis que si l'implémentation sait fournir exactement la largeur demandée. Sur les environnements actuels c'est très généralement le cas, mais ce point explique pourquoi le standard présente ces types comme conditionnels.

Sujets connexes

Constantes de limites
La librairie stdint.h
Macros de constantes entières
Types int_leastN_t et int_fastN_t


La librairie stdint.h Les types least et fast




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé