rechnung mit bits
-
hi leute,
habe mal ne frage:
ich benoetige eine funktion die folgendes macht:
8 bit muessen gespiegel werden, d.h. zb
10000000 soll zu einer 00000001 werden
01000000 soll zu einer 00000010 werden
00010000 soll zu einer 00001000 werdenusw.
ich bin noch nicht rechnerisch drauf gekommen, aber es muss doch irgendwie gehen oder?
ich habs jetzt mit einem string erledigt, also zahl als binaerwert gewandelt und dann den string von hinten nach vorn char fuer char umkopiert (umgedreht).nur ich suche noch eine elegantere weise.
danke fuer eure ideen
gruss
msp
-
Hatte keine Zeit mir selber was auszudenken, habe aber mit google das hier gefunden.
n = ((n >> 1) & 0x55555555) | ((n << 1) & 0xaaaaaaaa); n = ((n >> 2) & 0x33333333) | ((n << 2) & 0xcccccccc); n = ((n >> 4) & 0x0f0f0f0f) | ((n << 4) & 0xf0f0f0f0); n = ((n >> 8) & 0x00ff00ff) | ((n << 8) & 0xff00ff00); n = ((n >> 16) & 0x0000ffff) | ((n << 16) & 0xffff0000); -- C code which reverses the bits in a (long) word.
Kannst du dir evtl. auf ein Byte umschreiben.
-
Wie hast du die Zahl den vorliegen??
Wenn du sie in nem Integer oder Short hast und halt nur 8 Bit benutzt, geht es auch so:
for (int n=0; n<8; ++n) { tmp = zahl >> n; tmp = tmp % 2; tmp = tmp << (7-n); neu += tmp; }
Zwar nicht so elegant wie Wallis Lösung, dafür versteh ichs und es funzt