Maison > développement back-end > C++ > Que sont les représentations de pièges dans C et C , et les flotteurs de taille identique et leurs pointeurs partagent-ils la même représentation binaire ?

Que sont les représentations de pièges dans C et C , et les flotteurs de taille identique et leurs pointeurs partagent-ils la même représentation binaire ?

DDD
Libérer: 2024-12-18 22:45:20
original
728 Les gens l'ont consulté

What are Trap Representations in C and C  , and Do Identical-Sized Floats and Their Pointers Share the Same Binary Representation?

Représentation piège

Question :

  1. Qu'est-ce qu'une "représentation piège" en C ?
  2. Est-ce que cela s'applique au C ?
  3. Est-ce que deux variables, un flottant et un pointeur vers le flottant, ont la même représentation binaire si elles ont la même taille ?

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;
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal