wer Platz hat, nimmt eine Lookup-Tabelle:
1 | static const uint8_t lut = { 0xff, 0xfe, 0xfd, ... }
|
2 |
|
3 | uint8_t bitrev(uint8_t bits) {
|
4 | return lut[bits];
|
5 | }
|
... und wer keinen hat, der kann das auch in zwei 4-bit Lookups mit
entsprechenden Shifts (und dem damit verbundenen Performanceverlust)
aufteilen.
... und wer einen ColdFire hat, nimmt BITREV, die ARM-Fraktion RBIT...
C - Anfänger schrieb:
> Teo D. schrieb:
>> Beitrag "Re: Bits drehen bzw. spiegeln"
>> for ( i = 0; i < 8; i++ )
>> {
>> gespiegelt >>= 1;
>> gespiegelt |= original & 0x80;
>> original <<= 1;
>> }
>
> Die Lösung ist Prima. Danke!
Die Lösung ist m.E. suboptimal. Wenn "orginal" 0 wird, kann man
'fertigshiften' und aufhören. Macht man dennoch weiter, erzeugt man nur
noch unnötig Wärme ;)