Forum

Einloggen | Registrieren | RSS  

Erstsemester123

11.07.2011,
16:02
 

Bit-Maskierung Aufgabe (Computertechnik)

Hallo ich lerne grad Bitmaskierung,
und habe 2 Probleme( e und f) und bin mir auch nicht ganz sicher ob das so richtig ist.
Würde mich über eure Hilfe freuen!

Aufgabenstellung:

Wir sollen das was im Kommentar steht in c umsetzen. An Port 1 und 2 werden 8 bit Daten eingelesen.

unsigned char a,b,c,d,e,f,g;
a=PORT2;
g=PORT1;

b=(a&0x08); /*Bit 5 und Bit 2-0 von a löschen */
c=(a|0x30); /*Bit 5-4 von a setzen */
d=(a^ox81); /*Bit7 und 0 von a invertieren*/
e= /*Bit 2-0 von a ersetzen durch g Bit2-0 */
f= /*Bit6-4 von a ersetzen durch g Bit 2-0 */

79616363(R)

E-Mail

Leinfelden-Echterdingen,
11.07.2011,
16:52
(editiert von 79616363
am 11.07.2011 um 17:18)


@ Erstsemester123

Bit-Maskierung Aufgabe

» b=(a&0x08); /*Bit 5 und Bit 2-0 von a löschen */
» c=(a|0x30); /*Bit 5-4 von a setzen */
» d=(a^ox81); /*Bit7 und 0 von a invertieren*/
» e= /*Bit 2-0 von a ersetzen durch g Bit2-0 */
» f= /*Bit6-4 von a ersetzen durch g Bit 2-0 */

Hab's nur überflogen und hab auch grad wenig Zeit, aber wenn die Kommentare so stimmen, dann solltest Du auch über b nochmal nachdenken.
Gesetzte Bits 5,2,1,0 entsprechen der Maske 0x27. Wenn Du diese Bits löschen willst, dann brauchst Du aber nicht die Maske 0x27, sondern ~0x27 (entspricht 0xD8).

Bei d sollt man vielleicht mal den Buchstaben o durch die Ziffer 0 ersetzen ;-)

Die Teilaufgaben e und f laufen so ähnlich. Bei f brauchst Du aber noch ne Schiebeoperation ;-)

Ich mach das ggf. am späten Abend mal kurz.

Kannst Du vielleicht die genaue Aufgabenstellung noch einstellen, nicht dass man ins Blaue rät.

--
„Wo kämen wir hin, wenn jeder sagte, wo kämen wir hin und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen.“

(Kurt Marti)

m(R)

11.07.2011,
17:56

@ Erstsemester123

Bit-Maskierung Aufgabe

» b=(a&0x08); /*Bit 5 und Bit 2-0 von a löschen */

0x08 enthält nur ein einziges gesetztes Bit. Also können durch diesen Ausdruck nicht 4 Bits verändert werden und die anderen 4 belassen werden.


» c=(a|0x30); /*Bit 5-4 von a setzen */

Sieht gut aus.

Allerdings wird nicht a verändert, sondern das Resultat in c abgelegt. Das kommt in den anderen Teilen auch so vor. Vielleicht ist das auch nur eine Schwäche in der Formulierung der Aufgabe. Es scheint ja eher auf die Bit-Mathematik anzukommen.


» d=(a^ox81); /*Bit7 und 0 von a invertieren*/

Das stimmt, bis auf die Schreibweise der Null.


» e= /*Bit 2-0 von a ersetzen durch g Bit2-0 */

Ersetzen geht z.B. durch Ausmaskieren der betreffenden Bits (ähnlich wie es oben bei b wohl gemacht werden soll) und das Verodern mit einem Wert, bei dem genau alle anderen Bits ausmaskiert sind.

» f= /*Bit6-4 von a ersetzen durch g Bit 2-0 */

Genauso, aber hier noch mit dem Bonus, dass die Bits rumgeschoben werden.


m

Erstsemester123

11.07.2011,
18:39

@ m

Bit-Maskierung Aufgabe

» » b=(a&0x08); /*Bit 5 und Bit 2-0 von a löschen */
»
» 0x08 enthält nur ein einziges gesetztes Bit. Also können durch diesen
» Ausdruck nicht 4 Bits verändert werden und die anderen 4 belassen werden.

Ja stimmt kleiner Fehler...
b=(a&0xD8)

» » e= /*Bit 2-0 von a ersetzen durch g Bit2-0 */

also müsste dann
e=(a&0xF8)|(g&0x07) sein

und

» f= /*Bit6-4 von a ersetzen durch g Bit 2-0 */

f=(a&0x8F) | ( (g&0x07)<<4)

79616363(R)

E-Mail

Leinfelden-Echterdingen,
11.07.2011,
19:28

@ Erstsemester123

Bit-Maskierung Aufgabe

» » » b=(a&0x08); /*Bit 5 und Bit 2-0 von a löschen */
» »
» » 0x08 enthält nur ein einziges gesetztes Bit. Also können durch diesen
» » Ausdruck nicht 4 Bits verändert werden und die anderen 4 belassen
» werden.
»
» Ja stimmt kleiner Fehler...
» b=(a&0xD8)
»
» » » e= /*Bit 2-0 von a ersetzen durch g Bit2-0 */
»
» also müsste dann
» e=(a&0xF8)|(g&0x07) sein
»
» und
»
» » f= /*Bit6-4 von a ersetzen durch g Bit 2-0 */
»
» f=(a&0x8F) | ( (g&0x07)<<4)

Jeah, ich glaub er hat's - Guck ich mir später nochmal an :waving:

Iss immer schön, wenn jemand selbst auf den Trichter kommt :-)

--
„Wo kämen wir hin, wenn jeder sagte, wo kämen wir hin und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen.“

(Kurt Marti)