fireblade1282
Mitglied
Servus Leute!
Frage zu Bitoperationen in ganz normalem ANSI C, wird aber denke ich mal bei allen anderen C's ebenso sein sein.
Hintergrund:
Ich habe in einem reservierten Speicherbereich riesige Mengen von medizinischen CT Daten. Da mich im aktuellen Kontext nur ja/nein Werte interessieren arbeite ich auf Bit Ebene. Je nachdem wieviele Datensätze ich in den speicherbereich legen will, reserviere ich ihn als char, short oder long. Der erste Datensatz wir mit dem ersten Bit usw abgelegt. Die Bits setze ich ganz normal mit z.B.
char i = (char) 0x01;
short s = (short) 0x0001;
long l = (long) 0x00000001;
Die sorgen jeweils alle dafür, dass exakt das letzte bit gesetzt ist, soweit easy.
Mitlerweile benötigt die Anwendung aber teilweise mehr als 32 CT Datensätze im Speicher, ich habe also nun den double mit eingeführt. Jetzt habe ich aber folgendes Problem, zu dem ich noch nichts gefunden habe:
Eigentliche Frage:
Bewirkt
double d = (double) 0x0000000000000001;
dass das erste o. letzte Bit (je mnach Byteorder o.ä.) gesetzt ist?
Bedenken:
Mein gesunder Verstand warnt mich das so ein zu coden, da ja Fließkommazahlen mit signum, mantisse und exponent intern gespeichert werden. 0x00...0001 ist ja aber für den Compiler eine Konstante, die den Wert 1 ausdrückt, der wird ja dann sicher intern als +1e1 oder sowas gespeichert und das gibt Bitsalat - hab ich recht? Oder bewirkt das doch das was ich will.
Im Endeffekt will ich ja einfach nur einen 8Byte Block bitweise ansprechen (Ja - ANSI C auf einer AIX Maschine, auf dem Zielsystem sind es also wirklich 8 Bytes für den double, bitte keine Threads zu DEM Topic
)
Kann mir hier jemand was schlaues zu sagen? Bin für jeden Hint dankbar, fand in einschlägigen Literaturen und Google immer nur Bitoperationen für Integertypen...
Danke
Frage zu Bitoperationen in ganz normalem ANSI C, wird aber denke ich mal bei allen anderen C's ebenso sein sein.
Hintergrund:
Ich habe in einem reservierten Speicherbereich riesige Mengen von medizinischen CT Daten. Da mich im aktuellen Kontext nur ja/nein Werte interessieren arbeite ich auf Bit Ebene. Je nachdem wieviele Datensätze ich in den speicherbereich legen will, reserviere ich ihn als char, short oder long. Der erste Datensatz wir mit dem ersten Bit usw abgelegt. Die Bits setze ich ganz normal mit z.B.
char i = (char) 0x01;
short s = (short) 0x0001;
long l = (long) 0x00000001;
Die sorgen jeweils alle dafür, dass exakt das letzte bit gesetzt ist, soweit easy.
Mitlerweile benötigt die Anwendung aber teilweise mehr als 32 CT Datensätze im Speicher, ich habe also nun den double mit eingeführt. Jetzt habe ich aber folgendes Problem, zu dem ich noch nichts gefunden habe:
Eigentliche Frage:
Bewirkt
double d = (double) 0x0000000000000001;
dass das erste o. letzte Bit (je mnach Byteorder o.ä.) gesetzt ist?
Bedenken:
Mein gesunder Verstand warnt mich das so ein zu coden, da ja Fließkommazahlen mit signum, mantisse und exponent intern gespeichert werden. 0x00...0001 ist ja aber für den Compiler eine Konstante, die den Wert 1 ausdrückt, der wird ja dann sicher intern als +1e1 oder sowas gespeichert und das gibt Bitsalat - hab ich recht? Oder bewirkt das doch das was ich will.
Im Endeffekt will ich ja einfach nur einen 8Byte Block bitweise ansprechen (Ja - ANSI C auf einer AIX Maschine, auf dem Zielsystem sind es also wirklich 8 Bytes für den double, bitte keine Threads zu DEM Topic
![Eek! :o :o](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f631.png)
Kann mir hier jemand was schlaues zu sagen? Bin für jeden Hint dankbar, fand in einschlägigen Literaturen und Google immer nur Bitoperationen für Integertypen...
Danke