Représentation piège
Question :
Réponse :
1. Représentation de piège :
En C, une représentation de piège est un modèle de bits qui correspond à la taille d'un type mais provoque un comportement indéfini s'il est utilisé comme valeur de ce type. Aucun type n'est requis pour avoir des représentations de piège, mais le seul type garanti de ne pas en avoir est unsigned char.
Un exemple de représentation de piège est un NaN de signalisation dans un type à virgule flottante. Ces modèles ne sont pas définis dans C99.
2. Applicabilité à C :
Bien que la question ne mentionne pas C , il convient de noter que le concept de représentations pièges s'applique également à C.
3. Représentation binaire de Float et Pointer :
Le code fourni ci-dessous présente un comportement non défini :
float f = 3.5; int *pi = (int*)&f;
Cependant, ce comportement n'est pas lié aux représentations de piège. Pour obtenir la valeur entière avec le même modèle de bits que le flottant, utilisez le code suivant :
int extract_int(float f) { union { int i; float f; } u; u.f = f; return u.i; }
Ce code présente un comportement non spécifié en C99, ce qui signifie que la norme ne définit pas la valeur entière exacte produite, mais elle garantit qu’une valeur entière valide est obtenue. Par conséquent, il n'est pas garanti que la représentation binaire du flottant et de l'entier obtenue à l'aide de l'union soit identique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!