Fallendarstellung
Frage:
Antwort:
1. Trap-Darstellung:
In C ist eine Trap-Darstellung ein Bitmuster, das zur Größe eines Typs passt, aber undefiniertes Verhalten verursacht, wenn es als Wert dieses Typs verwendet wird. Es ist kein Typ erforderlich, um Trap-Darstellungen zu haben, aber der einzige Typ, der diese garantiert nicht hat, ist unsigned char.
Ein Beispiel für eine Trap-Darstellung ist ein signalisierendes NaN in einem Gleitkommatyp. Diese Muster sind in C99 nicht definiert.
2. Anwendbarkeit auf C:
Obwohl die Frage C nicht erwähnt, ist es erwähnenswert, dass das Konzept der Trap-Darstellungen auch für C gilt.
3. Binäre Darstellung von Float und Zeiger:
Der unten bereitgestellte Code zeigt undefiniertes Verhalten:
float f = 3.5; int *pi = (int*)&f;
Dieses Verhalten steht jedoch nicht im Zusammenhang mit Trap-Darstellungen. Um den ganzzahligen Wert mit demselben Bitmuster wie die Gleitkommazahl zu erhalten, verwenden Sie den folgenden Code:
int extract_int(float f) { union { int i; float f; } u; u.f = f; return u.i; }
Dieser Code weist in C99 ein nicht spezifiziertes Verhalten auf, was bedeutet, dass der Standard nicht den genauen erzeugten ganzzahligen Wert definiert, sondern ihn garantiert, dass ein gültiger ganzzahliger Wert erhalten wird. Daher kann nicht garantiert werden, dass die binäre Darstellung des Floats und der durch die Vereinigung erhaltenen Ganzzahl identisch sind.
Das obige ist der detaillierte Inhalt vonWas sind Trap-Darstellungen in C und C und haben Gleitkommazahlen gleicher Größe und ihre Zeiger dieselbe binäre Darstellung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!