Zahlenspielerei

anmae

Erfahrenes Mitglied
Hallo,

ich habe eine - für mich etwas knifflige - Aufgabe, aber ich denke mal wer schon nen weng mit Umrechnungen zu tun hatte kann mir vielleicht helfen.

Ich gebe eine Zahl zwischen 0 und 15,9999 ein.
Diese soll dann in eine 32 Bit Zahl umgerechnet werden :

long Zahl = 2^31 * x / 16;

anschließend möchte ich den Low und High Teil jeweils als Hexadezimale Zahl in einem String haben
also etwa so:
sprintf(hexLow,"0x%04x"Low);
sprintf(hexHigh,"0x%04x"High);

3 Fragen:
sind die Bausteine die ich hier schonmal hingeschrieben habe ok?
wie komme ich an den Low und High Teil des long ran?
Wie berechne ich in C : 2^31 ?


Danke schonmal.
 
Zuletzt bearbeitet:
anmae hat gesagt.:
sind die Bausteine die ich hier schonmal hingeschrieben habe ok?
Kann ich grad nicht auf die schnelle beurteilen....
wie komme ich an den Low und High Teil des long ran?
Am einfachsten geht es mit schieben und maskieren
Code:
hex _low & 0xffff; 
(hex_high >> 16) & 0xffff;
Wie berechne ich in C : 2^31 ?
Bei dieser funtkion würde ich die pow() Funktion benutzten.

Hoffe das war in der schnelle ok

Gruß
Lemi

Danke schonmal.
 
Wie berechne ich in C : 2^31 ?
Einfacher und schneller als pow(...) kann man 2er-Potenzen so berechnen:
Code:
int i = 1 << 31;
Ein shift nach links entspricht einmal mit 2 multipliziert.
-> 2^0 = 1; 2^1 = 2; ...
Um unnötige Konvertierungen zu vermeiden, würde ich die Berechnung dann so schreiben:
Code:
long Zahl = 2^31 * (long)(x / 16.0);
oder, wenn 2^31 fest ist:
Code:
long Zahl = 0x80000000 * (long)(x / 16.0);
 
Zuletzt bearbeitet:
Zurück