Conversions à partir des types entier non signé
Un entier non signé est converti en entier non signé ou signé plus court en tronquant les bits de poids fort, ou en entier non signé ou signé plus long par extension zéro (consultez le tableau Conversions de types intégraux non signés).
Lorsque la valeur ayant le type intégral est rétrogradée en entier signé plus petit, ou qu'un entier non signé est converti en son entier signé correspondant, la valeur est inchangée si elle peut être représentée dans le nouveau type. Toutefois, la valeur change si le bit de signe est défini, comme dans l'exemple suivant.
int j;
unsigned short k = 65533;
j = k;
printf_s( "%hd\n", j ); // Prints -3
Si elle ne peut pas être représentée, le résultat est défini par l'implémentation. Consultez Conversions de cast de type pour obtenir plus d'informations sur la façon dont le compilateur Microsoft C gère la rétrogradation des entiers. La conversion en entier ou la conversion de type de l'entier provoque le même comportement.
Les valeurs non signées sont converties de manière à conserver leur valeur et ne sont pas représentables directement en C. La seule exception est une conversion de unsigned long en float qui, au maximum, perd les bits de poids faible. Sinon, la valeur est conservée, signée ou non signée. Lorsqu'une valeur de type intégral est convertie en valeur flottante et que la valeur est en dehors de la plage qui peut être représentée, le résultat n'est pas défini. (Consultez Stockage des types de base pour plus d'informations sur la plage des types intégraux et à virgule flottante.)
Le tableau suivant répertorie les conversions de types intégraux non signés.
Conversions depuis les types intégraux non signés
From |
Pour |
Méthode |
---|---|---|
unsigned char |
char |
Conserver le modèle binaire. Le bit de poids fort devient un bit de signe |
unsigned char |
short |
Extension zéro |
unsigned char |
long |
Extension zéro |
unsigned char |
unsigned short |
Extension zéro |
unsigned char |
unsigned long |
Extension zéro |
unsigned char |
float |
Convertir en long. Convertir long en float |
unsigned char |
double |
Convertir en long. Convertir long en double |
unsigned char |
long double |
Convertir en long. Convertir long en double |
unsigned short |
char |
Conserver l'octet de poids faible |
unsigned short |
short |
Conserver le modèle binaire. Le bit de poids fort devient un bit de signe |
unsigned short |
long |
Extension zéro |
unsigned short |
unsigned char |
Conserver l'octet de poids faible |
unsigned short |
unsigned long |
Extension zéro |
unsigned short |
float |
Convertir en long. Convertir long en float |
unsigned short |
double |
Convertir en long. Convertir long en double |
unsigned short |
long double |
Convertir en long. Convertir long en double |
unsigned long |
char |
Conserver l'octet de poids faible |
unsigned long |
short |
Conserver le mot de poids faible |
unsigned long |
long |
Conserver le modèle binaire. Le bit de poids fort devient un bit de signe |
unsigned long |
unsigned char |
Conserver l'octet de poids faible |
unsigned long |
unsigned short |
Conserver le mot de poids faible |
unsigned long |
float |
Convertir en long. Convertir long en float |
unsigned long |
double |
Convertir directement en double |
unsigned long |
long double |
Convertir en long. Convertir long en double |
Section spécifique à Microsoft
Pour le compilateur Microsoft 32 bits C, le type unsigned int équivaut au type unsigned long. La conversion d'une valeur unsigned int s'effectue de la même façon que la conversion de unsigned long. Les conversions de valeurs unsigned long en float ne sont pas exactes si la valeur convertie est supérieure à la valeur long signée positive maximale.
FIN de la section spécifique à Microsoft