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 werden

    usw.

    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 😉


Anmelden zum Antworten