Heim > Backend-Entwicklung > C++ > Was sind Trap-Darstellungen in C und C und haben Gleitkommazahlen gleicher Größe und ihre Zeiger dieselbe binäre Darstellung?

Was sind Trap-Darstellungen in C und C und haben Gleitkommazahlen gleicher Größe und ihre Zeiger dieselbe binäre Darstellung?

DDD
Freigeben: 2024-12-18 22:45:20
Original
713 Leute haben es durchsucht

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

Fallendarstellung

Frage:

  1. Was ist eine „Fallendarstellung“? in C?
  2. Gilt das für C? ?
  3. Haben zwei Variablen, eine Gleitkommazahl und ein Zeiger auf die Gleitkommazahl, die gleiche binäre Darstellung, wenn sie die gleiche Größe haben?

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;
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage