I. Valeurs▲
Une valeur est une grandeur intrinsèquement constante
. Elle a un caractère abstrait en ce sens qu'elle
n'a pas besoin d'un support matériel pour exister.
Exemples :
2 , 3.1416 , Vrai, Rouge, ...
Ces grandeurs sont de nature différente : on a ici des valeurs
du genre entier, réel, booléen, couleur. Selon leur nature, certaines
opérations seront possibles et d'autres seront interdites ou non
définies. Ainsi, il semble naturel de donner un sens à 2+3 mais que dire
de 2+Rouge ?
Même si les valeurs doivent être représentées en machine par un code, ceci
ne doit pas faire oublier leur caractère abstrait ni leur signification.
Note : Le terme de valeur est utilisé ici dans un
sens usuel.
Le résultat de l'évaluation d'une expression est souvent
qualifié de "valeur de l'expression". En C, le résultat
de l'évaluation d'une expression est une grandeur, valeur ou
objet. Le terme "value" utilisé par la norme
ne correspond pas à la définition du terme valeur de ce texte, mais
plutôt à celle du terme "grandeur".
I-A. Type▲
En C, une valeur possède un type
qui précise à quel ensemble appartient la valeur.
Le type caractérise les propriétés de cet ensemble,
c'est à dire :
-
les valeurs que peuvent prendre les éléments de
cet ensemble.
-
les opérations qui peuvent être effectuées avec
les valeurs de cet ensemble.
- le codage binaire permettant la représentation des valeurs de cet ensemble en machine. L'opérateur sizeof nous donne le nombre de bytes utilisés pour la représentation de ces valeurs.
On peut donc considérer une valeur comme une constante d'un type donné (à différentier d'un objet constant).
I-B. Conversions, Cast▲
Il est parfois nécessaire de transformer une valeur
V1 d'un type donné T1
en une valeur V2 d'un autre type
T2. Cette opération est appelée
transtypage ou cast. Elle impose que soit définie une
règle de transformation des valeurs de type
T1 en des valeurs de type
T2. Si une telle règle n'existe pas,
le transtypage est impossible.
Cette opération de transtypage est parfois effectuée
automatiquement, et plus ou moins discrètement selon le cas,
par le compilateur ou peut être demandée par le
programmeur, lorsqu'elle est possible, en utilisant
l'opérateur de cast ().
(T2 ) V1
|
- Cette transformation peut conduire à une différence radicale
entre la représentation binaire de V1 et
de V2 et n'est donc pas une simple
interprétation du codage binaire de V1
selon la représentation binaire utilisée par les valeurs de
type T2.
- La transformation ne conserve pas nécessairement la "valeur"
de la grandeur : par exemple, la transformation de la valeur
258 de type int en une
valeur de type unsigned char
(sur 8 bits) donnera pour cette derniere la valeur 2.