Forum: Compiler & IDEs Frage zu Unions


von Martin (Gast)


Lesenswert?

Hallo,
ich möchte 32bit breite Daten vom typ unsigend int auf eine Variable der 
Grösse 64bit aufakkumulieren. Nun kam mir die Idee diese Geschichte mit 
Hilfe einer Union zu lösen.

union union_data
    { unsigned int long long v64;
      unsigned int v32;
    };

Ich addiere nun Daten auf union_data.v32 auf. Wenn ein Überlauf 
stattfinden, wird dieser in union_data.v64 zu sehen sein ? Habe leider 
keinen Rechner zur  Hand an dem ich dies ausprobieren könnte.
Danke und Gruss,
Martin

von Rolf Magnus (Gast)


Lesenswert?

> Wenn ein Überlauf stattfinden, wird dieser in union_data.v64 zu sehen
> sein ?

Nein. Ich verstehe auch den Sinn nicht. Warum nimmst du nicht gleich 
einfach eine 64bit-Variable?

von Martin (Gast)


Lesenswert?

Das ganze läuft auf einem 32bit proc. und ist in assembler geschrieben. 
Die eigentliche Auswerteroutine wiederrum in C. Ich wollte mir somit 
eigentlich nur die Überlauf Überprüfung im Assembler Code schenken.
Danke jedoch,
Martin

von Falk B. (falk)


Lesenswert?

@ Martin (Gast)

>Ich addiere nun Daten auf union_data.v32 auf. Wenn ein Überlauf
>stattfinden, wird dieser in union_data.v64 zu sehen sein ?

Lass diesen Hackerscheiss und mach es ordentlich.

>Das ganze läuft auf einem 32bit proc. und ist in assembler geschrieben.

Wo ist dann das Problem? Mach in ASM eine einfache 64 Bit Addition. Ala

AVR Arithmetik

>Die eigentliche Auswerteroutine wiederrum in C. Ich wollte mir somit
>eigentlich nur die Überlauf Überprüfung im Assembler Code schenken.

Geht nicht. ist auch nicht wirklich performancekritisch.

MFG
Falk

von Rolf Magnus (Gast)


Lesenswert?

> Ich wollte mir somit eigentlich nur die Überlauf Überprüfung im
> Assembler Code schenken.

Wie stellst du dir das vor? Wenn du eine 32-Bit-Addition machst, wird 
daraus nicht auf magische Weise eine 64-Bit-Addition, nur weil Werte mit 
diesen beiden Bitbreiten gemeinsam in einer union stehen. Wenn du eine 
64-Bit-Addition brauchst, mußt du sie auch machen. Die Überlauf 
Überprüfung" beschränkt sich ja in der Regel auch darauf, für die obere 
Hälfte statt des normalen Additionsbefehls den mit Carry zu verwenden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.