StructureUnion - Quad/Double initialisieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

StructureUnion - Quad/Double initialisieren

Beitrag von Josh »

Ich habe in einer StructureUnion ein Quad und ein Double. Wenn ich nun alles auf Null setzen will, genügt es dann in jedem Fall, wenn ich Quad auf Null setze und Double ist dann auch Null? Ich will mir eine Abfrage sparen, was für einen Typ ich gerade verwende.

Code: Alles auswählen

Structure MyStruc
  StructureUnion
    Quad.q
    Dbl .d
  EndStructureUnion
EndStructure

Define x.MyStruc

x\Dbl  = 3.141592654
x\Quad = 0

Debug x\Dbl
In diesem Beispiel funktioniert es ja, ist das aber in allen Fällen gewährleistet?
Zuletzt geändert von Josh am 19.06.2019 22:20, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: StructureUnion - Quad/Double initialisieren

Beitrag von STARGÅTE »

Bei einer StructureUnion belegen alle Felder in dieser Union den selben Speicher.
Die Quad und die Double haben beide 8 Byte Länge.
Da die 0 (Quad) in diesem Fall die selbe Bitsequenz hat wie die +0.0 (Double) ist beides null.
Das gilt aber nur für diesen speziellen Fall.

Wenn du die Quad auf -1 setzt, kommt bei der Double z.B. NaN raus, und nicht etwa -1.0
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: StructureUnion - Quad/Double initialisieren

Beitrag von Josh »

Danke für die Antwort. Es ging mir ja nur darum, die Werte auf null zu setzen. War mir eben nicht sicher, ob dies in allen Fällen gewährleistet ist.
Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: StructureUnion - Quad/Double initialisieren

Beitrag von Demivec »

Auch:

Code: Alles auswählen

ClearStructure(@x, MyStruc)
Bild
Antworten