gray code implementieren



  • Konfusius schrieb:

    @TactX:
    es muß return a ^ (a >> 1); heißen.
    sonst käme immer null raus 😉

    ...mit Soße. >> geht vor ^



  • nich streiten, nachgucken
    http://www.cppreference.com/operator_precedence.html

    und konfusius, bitte poste nur, wenn du dir sicher bist, dass du was richtiges sagst.



  • TactX schrieb:

    unsigned int convertToGray( unsigned int a )
    {
       return a ^ a >> 1;
    }
    

    und wie sieht die umkehrfunktion aus?



  • ...ist er uns immer noch schuldig.



  • ZuK schrieb:

    check this out
    http://yagni.com/graycode/
    Kurt

    Soviel Python kriegt man ja wohl noch hin...



  • unsigned int decode(unsigned int b) 
    {
        return b ^ b >> 1 ^ (b ^ b >> 1) >> 2 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2) >> 4 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2 ^  (b ^ b >> 1 ^ (b ^ b >> 1)>> 2) >> 4) >> 8 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2) >> 4 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2) >> 4) >> 8) >> 16;
    }
    


  • Keine Python schrieb:

    unsigned int decode(unsigned int b) 
    {
        return b ^ b >> 1 ^ (b ^ b >> 1) >> 2 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2) >> 4 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2 ^  (b ^ b >> 1 ^ (b ^ b >> 1)>> 2) >> 4) >> 8 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2) >> 4 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2 ^ (b ^ b >> 1 ^ (b ^ b >> 1)>> 2) >> 4) >> 8) >> 16;
    }
    

    ja, sowas hatte ich befürchtet.

    unsigned int decode(unsigned int b) 
    {
       int r;
       while(convertToGray(++r)!=b);
       return r;
    }
    

    aber naja, vielleicht nimmt man den, wenn ein ganz lahmer rechner kodiert und ein moderner pc dekodiert.



  • volkard schrieb:

    unsigned int decode(unsigned int b) 
    {
       int r;
       while(convertToGray(++r)!=b);
       return r;
    }
    

    Jaja, und sowas hatte ich befürchtet, allerdings nie damit gerechnet, daß gerade du sowas postest.

    unsigned int decode (unsigned int b) 
    {
       b ^= b >> 1;
       b ^= b >> 2;
       b ^= b >> 4;
       b ^= b >> 8;
       return b ^ b >> 16;
    

    Ist auch für langsame Rechner geeignet



  • volkard schrieb:

    unsigned int decode(unsigned int b) 
    {
       int r;
       while(convertToGray(++r)!=b);
       return r;
    }
    

    Jaja, und sowas hatte ich befürchtet, allerdings nie damit gerechnet, daß gerade du sowas postest.

    unsigned int decode (unsigned int b) 
    {
       b ^= b >> 1;
       b ^= b >> 2;
       b ^= b >> 4;
       b ^= b >> 8;
       return b ^ b >> 16;
    

    Ist auch für langsame Rechner geeignet



  • Hallo zusammen,

    das mit

    unsigned int convertToGray( unsigned int a ) 
    { 
       return a ^ a >> 1; 
    }
    

    funktioniert ja prima. Ich zähle nun mit 0, 1, 3, 2, 6,...hoch, Graycode-Dezimal eben. So weit so gut. Nun muss ich das ganze in eine Hexzahl umwandeln. Ich muss mit diesen Daten eine eine reiche von LED's zum leuchten bringen. Damit soll der Graycode eben binär angezeigt werden. Ich habe da insgesamt 8LED's. Die Daten muss ich als Hex an die "Schittstelle liefern". Wenn ich z.B. eine 6 anzeigen möchte. also so quasi:

    0 0 0 0 0 x x 0

    Die "Schnittstelle" spreche ich dann so an:
    (0x06ffffff), bei einer 8 halt (0x08ffffff). Nun weiß ich nicht, wie ich die Dezimalfolge 0,1 ,3, 2 usw. halt in hex umwandle.

    Bin für jeden Tip dankbar.
    Gruß
    Volker



  • unsigned long x = (unsigned long)wert << 24 | 0xffffff;


Anmelden zum Antworten