Mailinglist Archive: opensuse-programming-de (158 mails)

< Previous Next >
Re: C++ -> einzelne Bits aus Datei lesen
  • From: Ralf Corsepius <corsepiu@xxxxxxxxxxxxxx>
  • Date: 19 May 2003 09:24:07 +0200
  • Message-id: <1053329046.28699.26365.camel@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Am Sam, 2003-05-17 um 16.23 schrieb Andre Heine:
> Am Saturday 17 May 2003 14:35 schrieb Bodo Kaelberer:
>
> [...]
>
> > Das ist ja ein nettes Thema fuer Einsteiger (-;
>
> Jep :)
>
> > Die Funktion byteToBit() beginnt beim niedrigsten Bit. Willst Du
> > mit dem hoechsten beginnen, dann muss Du als Anfangswert 0x80
> > statt 0x01 verwenden und zum Schiften >> statt <<.
> >
> > Ausgabe: 10000000 00001111 00101100
> >
> > Das ist vom Aufruf her recht komfortabel. Es wirkt etwas
> > umstaendlich, aber dafuer hat es ein stream-artiges Verhalten -
> > Du kannst wirklich Bit fuer Bit lesen.
> > Die Performance kann ich nicht abschaetzen.
>
> Im C Buch von Suse Press steht, das Bitfelder langsamer sind, weil
> diese intern "shiften", bit Verknüpfungen(& |) sollen sehr
> performant sein, aber nicht speicherefffizient wie Bitfelder...
So pauschal ausgedrückt, ist diese Aussage falsch.

Die Effizienz von C-Bitfeldern ist sehr compiler- und prozessorabhängig.
Das Ergebnis kann je nach Anwendung, Compiler und Prozessor sehr
unterschiedlich ausfallen.

"Verknüpfungen" (Bit-Operationen) sind insbes. dann signifikanter
effizienter, wenn der Autor eines Programmes "Shifts" vermeidet, in dem
er Bits in Ordinaltypen direkt setzt und Vergleiche mit den Ordinaltypen
selbst (Bit-Masken) verwendet, statt einzelne Bits zu setzen bzw.
einzelne Bits zu vergleichen.

> Meine Vorliebe liegt bei den Bitfeldern, lässt sich im Quelltext
> viel besser lesen.
Grösster Nachteil von C-Bitfeldern: Die interne Reihenfolge der Bits
innerhalb von structs ist nicht definiert.

D.h. so bald C-Bitfelder binär ausgegeben werden sollen oder Hardware
mit Bitfeldern angesteuert werden sollen, wird der Code unportabel.

Ralf



< Previous Next >
Follow Ups