Conversions de types intégraux non signés
Entier non signé est converti en un non signé ou en entier signé plus court en tronquant les bits de poids fort, ou à un plus long non signé ou entier signé zéro-en d'extension (consultez le tableau de conversions des types intégraux non signés ).
Lorsque la valeur avec le type intégral est déplacée à un entier signé avec la plus petite taille, ou 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 il représente les modifications 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 implémentation-est défini.Consultez conversions de cast de type pour plus d'informations sur la gestion du compilateur C Microsoft de la rétrogadation des entiers.Le même comportement provient de la conversion entière ou du type cast l'entier.
Des 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 d' unsigned long à float, qui perd au plus les bits de poids faible.Sinon, la valeur est conservée, signé ou non signé.Lorsqu'une valeur de type intégral est convertie en flottante, la valeur est en dehors de la plage qui peut être représenté, le résultat n'est pas défini.(Consultez stockage des types de base pour plus d'informations sur la plage pour les types intégraux et à virgule flottante.)
Le tableau suivant répertorie les conversions des types intégraux non signés.
conversions des types intégraux non signés
From |
Pour |
Méthode |
---|---|---|
unsigned char |
char |
Modèle binaire de conserver ; le bit de poids fort est bit de signe |
unsigned char |
short |
Zéro-étendez |
unsigned char |
long |
Zéro-étendez |
unsigned char |
unsigned short |
Zéro-étendez |
unsigned char |
unsigned long |
Zéro-étendez |
unsigned char |
float |
Converti en long; converti long à float |
unsigned char |
double |
Converti en long; converti long à double |
unsigned char |
long double |
Converti en long; converti long à double |
unsigned short |
char |
Octet de poids faible de conserver |
unsigned short |
short |
Modèle binaire de conserver ; le bit de poids fort est bit de signe |
unsigned short |
long |
Zéro-étendez |
unsigned short |
unsigned char |
conservez l'octet de poids faible |
unsigned short |
unsigned long |
Zéro-étendez |
unsigned short |
float |
Converti en long; converti long à float |
unsigned short |
double |
Converti en long; converti long à double |
unsigned short |
long double |
Converti en long; converti long à double |
unsigned long |
char |
Octet de poids faible de conserver |
unsigned long |
short |
Conservez le mot de poids faible |
unsigned long |
long |
Modèle binaire de conserver ; le bit de poids fort est bit de signe |
unsigned long |
unsigned char |
Octet de poids faible de conserver |
unsigned long |
unsigned short |
Conservez le mot de poids faible |
unsigned long |
float |
Converti en long; converti long à float |
unsigned long |
double |
converti directement à double |
unsigned long |
long double |
Converti en long; converti long à double |
Spécifique à Microsoft
pour le compilateur C 32 bits de Microsoft, le type d' unsigned int est équivalent au type d' unsigned long .La conversion d'une valeur d' unsigned int continue de la même façon que la conversion d' unsigned long.Les conversions des valeurs d' unsigned long à float ne sont pas précises si la valeur est convertie est supérieure à la valeur positive signée maximale de long .
détail de FIN Microsoft