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.cGreetz,
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 dazustellen1. 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!