Bitreihenfolge umkehren/Operator für binäres Wortspiegeln?

22/06/2009 - 16:52 von Robert Hartmann | Report spam
Hallo zusammen,

wahrscheinlich hab ich nur einen Bitoperator übersehen,
zumindest kann ich den nicht finden.

int main(){
unsigned char 8bit = 0xf1;


...

}

Die Variable 8bit hat binàr den Wert: 1111 0001

nun suche ich einen Operator, der mir das binàre Wort spiegelt,
also als Ergebnis

1000 1111

hat.

Irgendwie hab ich gerade keine Idee mehr,
wie ich die Wortspiegelung selber implementieren kann,
außer jede einzelne Bitstelle abzutesten.

unsigned char spiegelwort(unsignet char wort)
{
unsigned char ret = 0;
for (int pos = 0; pos < 8; pos++)
{
bool value = gibBitAusByte(wort, 8 - pos); /*nur 1 oder 0*/
ret = setzeBitInByte(ret, pos, value);
}
return ret;
}

Schöner wàre wirklich wenn es für die Wortspiegelung
etwas gàbe ohne zusàtzliche Funktionsaufrufe.

Vielleicht sollte ich für heute damit Schluss machen,
und morgen weiter überlegen.

Gruß Robert
 

Lesen sie die antworten

#1 Falk Tannhäuser
22/06/2009 - 17:36 | Warnen spam
Robert Hartmann wrote:
Irgendwie hab ich gerade keine Idee mehr,
wie ich die Wortspiegelung selber implementieren kann,
außer jede einzelne Bitstelle abzutesten.



Siehe <http://graphics.stanford.edu/~seander/bithacks.html> und auf
dieser Seite insbesondere den Abschnitt "Reversing bit sequences"
<http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious>
bis <http://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel>.

Soll wirklich nur ein 8-Bit-Byte gespiegelt werden, kann man den
letzteren Code-Schnipsel so vereinfachen:


unsigned char v; // 8-bit word to reverse bit order

// swap odd and even bits
v = ((v >> 1) & 0x55) | ((v & 0x55) << 1);
// swap consecutive pairs
v = ((v >> 2) & 0x33) | ((v & 0x33) << 2);
// swap nibbles ...
v = ((v >> 4) & 0x0F) | ((v & 0x0F) << 4);


MfG
Falk

Ähnliche fragen