64 Bit aus 2 mal 32

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

64 Bit aus 2 mal 32

Beitrag von BartSimpson »

Ich weis, das hat primär nix mit Qt zu tun:(
Aber wie mache ich aus 2 mal ulong einmal qulonglong??
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Danke vielmals:)
es muss aber ulong statt long heissen:)
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Ebend muste ich festestellen, das das nicht immer geht:(
aus 0x60000 und 0xaf00452 wird nicht
0x60000af00452 sondern 0x0:(
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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:)

Code: Alles auswählen

Zahl64 = ((qulonglong)MSB)<<32 | LSB 
Zuletzt geändert von BartSimpson am 28. September 2005 14:19, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Die 2 Zahl ist ja schon max. 32 Bit. und damit landet die ja eh rechts. solange wie die usignet ist:)
Antworten