Seite 1 von 1
64 Bit aus 2 mal 32
Verfasst: 16. September 2005 18:21
von BartSimpson
Ich weis, das hat primär nix mit Qt zu tun:(
Aber wie mache ich aus 2 mal ulong einmal qulonglong??
Verfasst: 26. September 2005 14:15
von Christian81
Etwas spät, aber besser als nie
Code: Alles auswählen
long lVar1=0x12345678, lVar2=0x9abcdef0;
qulonglong qVar1;
qVar1 = ((qulonglong)lVar1)<<32 + lVar2
// qVar == 0x123456789abcdef0
So wandert lVar1 in die 32 höchsten bits von qVar1.
Verfasst: 26. September 2005 14:58
von BartSimpson
Danke vielmals:)
es muss aber ulong statt long heissen:)
Verfasst: 28. September 2005 13:18
von BartSimpson
Ebend muste ich festestellen, das das nicht immer geht:(
aus 0x60000 und 0xaf00452 wird nicht
0x60000af00452 sondern 0x0:(
Verfasst: 28. September 2005 13:37
von Christian81
Bei mir funktioniert es wunderbar, allerdings kam noch eine kleine Warnung als ich es mit msvc7 ausprobierte. So ists besser:
Code: Alles auswählen
unsigned long l1 = 0x60000;
unsigned long l2 = 0xaf00452;
qulonglong i64 = (((qulonglong)l1) << 32) + l2;
// Debugger: i64 = 0x000600000af00452
Wie hast Du denn das Ergebnis überprüft?
Verfasst: 28. September 2005 13:55
von BartSimpson
ich benutze den gcc
ich bekommen keine Warnung.
nach etwas probieren habe ich es gefunden, es liegt am +
wenn ich das durch den Binäroperatur oder ersetzte geht das immer:)
Verfasst: 28. September 2005 14:04
von Christian81
Ich wollte auch erst "|" benutzen, dachte aber mit "+" ist es leichter zu verstehen. Evtl. muss man vor der Addition noch l2 auf ulonglong casten damit es auch mit dem gcc funktioniert...
Verfasst: 28. September 2005 14:23
von BartSimpson
Die 2 Zahl ist ja schon max. 32 Bit. und damit landet die ja eh rechts. solange wie die usignet ist:)