Vous êtes sur la page 1sur 22

Wikiversité

Langage C++/Types
< Langage C++

Les Types
En C++ il existe plusieurs types organisés
dans des catégories. Ces types ont
différentes longueurs et différentes
interprétations possibles dépendant de la
plage de valeurs sur laquelle on veut
travailler : signés ou non, à virgule
flottante ou non.

Selon l'architecture de votre ordinateur


les tailles des types peuvent varier ! Ce
cours se base sur une architecture PC.
D'autres machines ont potentiellement
des types de longueurs différentes de
celles exprimées ici.

Types Intrinsèques :
Il existe plusieurs catégories de types en
C++ dont certaines sont incompatibles
avec le langage C. Pour représenter les
nombres non-signés on utilise le mot clé
"unsigned". Pour représenter les nombres
signés on utilise le mot clé "signed". Cela
permet à l'ordinateur de savoir comment
il doit interpréter les valeurs. Pour des
raisons de simplification du codage, les
types représentent par défaut des
nombres signés, ce qui rend l’utilisation
du mot clé "signed" facultative.

Catégories de types
Le Type Vide

Cette catégorie, compatible avec le


langage C, représente l'absence de type.

Le type vide est surtout utilisé pour


l'écriture de méthodes (les méthodes ne
renvoyant aucune valeur ont un type de
retour vide), mais il arrive que l’on s'en
serve pour accéder à une adresse
mémoire sans essayer d’avoir une
interprétation de la valeur se trouvant à
cette adresse.
Type de Taille du type en Nombres de valeurs Plage de valeurs
Base octets possibles possibles

void (inaccessible) (inaccessible) (inaccessible)

Le Type Char, un type lettré !

Le type char est un type un peu


particulier : il se comporte comme un
entier mais il est destiné à mémoriser
des caractères (ou parfois des morceaux
de caractères). Dans certains système
d'exploitation il existe une table de 256
dessins représentant graphiquement,
entre autres, les 26 lettres minuscules et
majuscules (52 au total) ainsi que les 10
chiffres (0 à 9). Le reste des 256 codes
permet de représenter d'autres
caractères tels que le caractère null,
l'espace, la tabulation, la ponctuation ou
des caractères propres à des langues
spéciales, parfois même des smileys. Le
dessin de ces caractères ainsi que leur
codage numérique sont définis par une
norme de codage de caractères. Par
exemple, la norme ASCII est une norme
relativement ancienne, alors que la
norme Unicode est plus universelle.
L'ordinateur lui ne manipulera que les
valeurs numérique de ce type, par contre
les logiciels qui affichent la valeur de ce
type à l'écran le font sous forme
graphique, c'est-à-dire en affichant le
dessin du caractère correspondant à la
valeur affectée.

Commun aux processeurs 32 et 64 bit :

Taille du type Nombres de Plage de valeurs


Mode Type de Base
en octets valeurs possibles possible dans le mode

non-signé unsigned char 1 256 [0 ; 255]

signé (signed) char 1 256 [ -128 ; +127 ]

caractère (signed|unsigned) Caractères de la table


1 256
(non-signé) char ASCII

Les Entiers
Cette catégorie, compatible avec le
langage C, regroupe les types
représentant les nombres entiers. À
partir du type short, tous les types entiers
se réfèrent au type int. Là encore pour
simplifier le codage, l'écriture du mot clé
"int" est facultative excepté pour le type
int signé lui-même.

Commun aux processeurs 32 et 64 bit :


Taille du type en Nombres de valeurs Plage de valeurs possible
Mode Type de Base
octets possibles dans le mode

non- unsigned
1 256 [ 0 ; 255 ]
signé char

signé (signed) char 1 256 [ -128 ; +127 ]

non- unsigned
2 65 536 [ 0 ; 65 535 ]
signé short (int)

(signed)
signé 2 65 536 [ −32 768 ; 32 767 ]
short (int)

non- unsigned
4 4 294 967 296 [0; 4 294 967 295 ]
signé (int)

[ −2 147 483 648 ;
signé (signed) int 4 4 294 967 296
2 147 483 647 ]

Spécifiques aux processeurs 32 bits :


Taille du
Type de Nombres de valeurs Plage de valeurs possible
Mode type en
Base possibles dans le mode
octets

non- unsigned
4 4 294 967 296 [0; 4 294 967 295 ]
signé long (int)

signed long [ −2 147 489 648 ;


signé 4 4 294 967 296
(int) 2 147 489 647 ]

unsigned [0;
non-
long long 8 18 446 744 073 509 552 000 18 446 744 073 509 552 000
signé
(int) ]

(signed) [
signé long long 8 18 446 744 073 509 552 000 −9 223 372 036 854 776 000 ;
(int) 9 223 372 036 854 776 000 ]

Spécifiques aux processeurs 64 bits :

Taille du
Type de Nombres de valeurs Plage de valeurs possible
Mode type en
Base possibles dans le mode
octets

[ 0 ;
non- unsigned
8 18 446 744 073 509 552 000 18 446 744 073 509 552 000
signé long (int)
]

[
(signed)
signé 8 18 446 744 073 509 552 000 −9 223 372 036 854 776 000 ;
long (int)
9 223 372 036 854 776 000 ]
En effet, selon que l’on soit en présence
d’un processeur 32 ou 64 bits, certains
types ont des tailles et des plages de
valeurs variables. C’est pour cette raison
que normalement on doit utiliser les
types dit "Entiers Fixes" dont nous
parlerons plus loin.

Une règle détermine la validité des tailles


des types entiers :
[signed|unsigned], char <= short <= int <=
long [<= long long]

Les Flottants

Cette catégorie, compatible avec le


langage C, regroupe les types
représentant les nombres à virgule
flottante.

Commun aux processeurs 32 et 64 bit :


Taille
Type du Taille de Plage de
Taille de
de type la Nombres de valeurs possibles valeurs
l'exposant
Base en mantisse possible
octets

(indisponible
float 4 8 bits 23 bits 4 294 967 296
actuellement

(indisponible
double 8 11 bits 52 bits 18 446 744 073 509 552 000
actuellement

long (indisponible
12 15 bits 64 bits 79 008 162 513 705 380 000 000 000 000
double actuellement

Le Type Logique

Ce type est un apport par rapport au


langage C, il n'est donc pas compatible
avec celui ci.
Le type bool est un type un peu
particulier. Il est codé sur 4 octets et
représente les données logiques vrai et
faux par 2 mots clés respectivement
"true" et "false". Ce type gère sa valeur de
manière assez singulière :

true vaut 1, false vaut 0, mais d’une


manière générale tout ce qui n’est pas
false (égal à 0) vaut true (différent de 0).
En effet comme ce type est codé sur
4 octets il possède la même plage de
valeurs qu'un signed int et nous pouvons
lui affecter n’importe quelle valeur de
cette plage.

Commun aux processeurs 32 et 64 bit :

Type Taille du Nombres de


Plage de valeurs Valeur Valeur = [ −2 147 489 648 ;
de type en valeurs
possible =0 -1 ] U [ +1 ; 2 147 489 647 ]
Base octets possibles

[
bool 4 4 294 967 296 −2 147 489 648 ; false true
2 147 489 647 ]

Les Méthodes

Nous parlerons en détail de ce type dans


le chapitre Méthodes.

Les Pointeurs, Tableaux et Références


Le type pointeur n'est qu'un raccourci
vers la mémoire. Le type pointeur est en
fait une adresse mémoire soit un entier
non signé de la taille du bus d'adresse
dans le contexte logiciel. Sa taille est
donc variable suivant le matériel et le
système d'exploitation utilisé.

Sa valeur représente l'adresse mémoire


vers laquelle il pointe. Son type est le
type dans lequel on lui demande de
traduire la valeur existant à l'adresse où il
pointe.
Il peut s'agir dans des cas peu fréquents
de pointeurs sur méthodes mais nous
verrons cela dans le chapitre Pointeur,
Tableaux et Références.

Les Énumerations

Nous parlerons en détail de ce type dans


le chapitre Énumérations.

Les Structures

Nous parlerons en détail de ce type dans


le chapitre Structures, unions et champs
de bits.
Les Champs de Bits

Nous parlerons en détail de ce type dans


le chapitre Structures, unions et champs
de bits.

Les Classes

Les classes sont le summum de


l'architecture logicielle. Elles permettent
la programmation-objet et la
construction d'applications au code
robuste réutilisable et relativement facile
à debugger. Nous en reparlerons plus
loin.

Structures vs Classes

La visibilité d’une classe est par défaut


privée, celle d’une structure, publique.
L’héritage d’une classe est par défaut
privé, celle d’une structure, publique.
Template de classe, impossible en
structure.

Types Étendus
Les types étendus sont des types définis
par les utilisateurs et sont le plus
souvent des agglomérations de types
intrinsèques et/ou types étendus. Ainsi il
est possible de créer des types étendus
agglomérant n’importe quel type
intrinsèque en n’importe quelle quantité
(dans les limites de la mémoire
disponible) et dans n’importe quel ordre.

Le langage nous permet de définir de


nouveaux types étendus grâce au mot
clé "typedef".
La syntaxe de cette instruction est :

typedef NomDuTypeEtendu
NomDuTypeDeBase;

Nous verrons des exemples concrets de


cette syntaxe dans les chapitres
suivants.

Récupérée de
« https://fr.wikiversity.org/w/index.php?
title=Langage_C%2B%2B/Types&oldid=819906 »
Wikiversité

La dernière modification de cette page a été faite


le 20 novembre 2020 à 15:46. •
Le contenu est disponible sous licence CC BY-SA
3.0 sauf mention contraire.

Vous aimerez peut-être aussi