Bitoperationen



  • Hallo an alle,
    muss im Rahmen eines Projektes folgenden Sourcecode von c in c++ übersetzen und erklären.

    //frg,fll,flh,fhl,freq,osc vom typ int

    frg = freq/osc*4294967296.0;
    fll=frg&0xFF;
    flh=(frg&0xFF00)>>8;
    fhl=(frg&0xFF0000)>>16;
    fhh=(frg&0xFF000000)>>24;

    Da ich mich mit Bitmustern nicht auskenne bräuchte ich hierbei hilfe zum erklären.
    Hier gibts den kompletten Sourcecode http://mitglied.lycos.de/markusmaerz/drm/setfreq.c

    Greetz,
    Darksoul



  • Das sieht in C++ nicht notwendigerweise anders aus.



  • das Problem ist dass ich den sourcecode nicht verstehe, zumindest nicht den teil, den ich angegeben habe. Deshalb frage ich eher nach einer erklärung als nach einer Übersetzung von c nach c++



  • Das ist im Prinzip sowas wie ne zerlegung in jeweils 8 Bit-Blöcke.
    Könnte mir gut vorstellen, dass damit ein 32Bit RGB (plus alpha wert) in die einzelnen Bestandteile zerlegt wird.
    Also das '&' ist ein bitweises und, und der shift operator verschiebt einfach bits um die angegebene stellen zahl.
    Ich versuch das mal an ner tabelle anschaulich dazustellen

    1.
      01010101 01011010 10110010 10111001
    & 00000000 00000000 00000000 11111111
    = 00000000 00000000 00000000 10111001
    
    2.
      01010101 01011010 10110010 10111001
    & 00000000 00000000 11111111 00000000
    = 00000000 00000000 10110010 00000000
    >> 8
    = 00000000 00000000 00000000 10110010
    
    3.
      01010101 01011010 10110010 10111001
    & 00000000 11111111 00000000 00000000
    = 00000000 01011010 00000000 00000000
    >> 16
    = 00000000 00000000 00000000 10110010
    
    4.
      01010101 01011010 10110010 10111001
    & 11111111 00000000 00000000 00000000
    = 01010101 00000000 00000000 00000000
    >> 24
    = 00000000 00000000 00000000 01010101
    

    Hoffe dass dir das zumindest erklärt was genau dort passiert



  • Super.
    Danke für die schnelle Hilfe, hat mir wirklich sehr geholfen.
    Greetz,
    Basti



  • Mir hat das am anfang auch probleme bereitet, hab mir dann aber (am anfang) ne eselbrücke gebaut...wobeis nichmal eine ist

    Beispiel leftshift:

    32<<1
    

    bedeutet 32 mal 2;
    denn wenn man die 1ner bits um ein bit verschiebt, verdoppelt sich die zahl!

    umgedreht ist es beim rightshift

    32>>1 ist 32 durch 2!


Anmelden zum Antworten