Annexe A – Les principaux types de variables
Annexe A – Les types fondamentaux du C++
ANNEXE A – Les types fondamentaux du C++
Valeur logique (true ou false)
Caractère ASCII ou petit entier
8 octets (Mac/Linux)
* Les tailles indiquées correspondent aux plateformes 64 bits les plus courantes (macOS/Linux). Elles peuvent varier suivant le
compilateur et le système d’exploitation.
Table 1 – Principaux types entiers.
Version non signée de char
Version non signée de short
Version non signée de int
8 octets (Mac/Linux)
Version non signée de long
Version non signée de long long
Les types non signés permettent uniquement de représenter des valeurs positives ou nulles. En contrepartie, ils offrent une plage de
valeurs positives environ deux fois plus grande que les types signés de même taille.
Table 2 – Versions non signées des types entiers.
Le type char occupe un octet comme signed char et unsigned char. Sa particularité est d’être destiné
principalement à la représentation des caractères. En réalité, un caractère est mémorisé sous la forme d’un
entier correspondant à son code (par exemple le code ASCII ou Unicode). Le standard C++ ne précise pas si
char est signé ou non signé : ce choix dépend du compilateur et de la plateforme. Lorsqu’il est nécessaire de
lever toute ambiguïté, on utilise explicitement signed char ou unsigned char.
Illustration du type char
Programme 1 – Valeur de type char pour la lettre ’A’
std::cout << c << ’\n’;
std::cout << static_cast<int>(c) << ’\n’;
Programme 2 – Sortie
AccueilAnnexe A – Les types fondamentaux du C++ Valeur maximale d’une variable de type char Il faut distinguer la capacité du type char et les codes effective- • Valeur maximale d’un char Cela dépend de son signe. 1. Si char est signé (signed char) : minimum : -128 et maximum : 127. 2. Si char est non signé (unsigned char) : minimum : 0 et maximum = 255. Comme le standard C++ ne précise pas si char est signé ou non, il est préférable de ne pas supposer sa plage • Valeurs effectivement utilisées Cela dépend de l’encodage. En ASCII (historique) on utilise seulement 128 codes, de 0 à 127. Historiquement, un char représentait un caractère codé sur un octet (ASCII). Aujourd’hui, avec l’encodage UTF-8, un caractère peut occuper plusieurs octets. Le type char représente donc un octet, et non toujours un caractère complet. Pour l’instant, par souci de simplicité, on ne s’occupe que de l’encodage ASCII. 16 octets (selon plateforme) * Les nombres réels sont stockés selon la norme IEEE 754. Table 3 – Principaux types réels. Les tailles mémoire Les résultats dépendent de la plateforme. Programme 3 – Tailles de différents types std::cout << sizeof(bool) << ’\n’; std::cout << sizeof(char) << ’\n’; std::cout << sizeof(short) << ’\n’; std::cout << sizeof(int) << ’\n’; std::cout << sizeof(long) << ’\n’;
Accueilstd::cout << sizeof(long long) << ’\n’; std::cout << sizeof(float) << ’\n’; std::cout << sizeof(double) << ’\n’; Annexe A – Les types fondamentaux du C++ Programme 4 – Sortie Program ended with exit code: 0 Les types à taille fixe Jusqu’à présent, nous avons utilisé des types tels que int, long ou short. Bien qu’ils soient très pratiques, leur taille n’est pas entièrement fixée par le standard C++. Par exemple, un long occupe généralement 8 octets sur les ordinateurs récents sous macOS ou Linux, mais seulement 4 octets sur certains systèmes Windows. Un même programme peut donc manipuler des tailles différentes selon la plateforme utilisée. Dans la plupart des applications, cette différence n’a aucune conséquence. En revanche, elle devient critique lorsqu’un programme communique avec du matériel électronique, lit ou écrit un fichier binaire, échange des données sur un réseau ou utilise un protocole de communication précis. Pour répondre à ce besoin, la bibliothèque standard C++ définit des types dont la taille est garantie. Leur nom indique directement le nombre de bits utilisés. Ainsi, int8_t représente un entier signé de 8 bits, uint16_t un entier non signé de 16 bits et uint32_t un entier non signé de 32 bits. Ces types sont très utilisés en programmation embarquée, notamment avec l’ESP32 et ESP-IDF, où la taille exacte des données est souvent imposée par le matériel ou par les protocoles de communication. Table 4 – Les types entiers à taille fixe définis dans <cstdint>. Les types à taille fixe ont été introduits avec la norme C99, puis repris par le C++ (dans l’en-tête <cstdint>). Ils sont aujourd’hui largement utilisés dans les domaines où la portabilité et la compatibilité matérielle sont Le type size_t est utilisé pour représenter la taille d’un objet ou le nombre d’éléments contenus dans une structure de données. Il est renvoyé notamment par l’opérateur sizeof() et par les fonctions size() de nombreuses classes
AccueilAnnexe A – Les types fondamentaux du C++ de la bibliothèque standard 1 .
Accueilcpp-An1- Annexe A – Les types fondamentaux du C++ 1. On reviendra sur le type size_t par la suite
Accueil