Archiv verlassen und diese Seite im Standarddesign anzeigen : Was bedeutet dieser C- Code
Hallo
Ich bin mich gerade durch den Code eines bekannten am kämpfen, dadurch bin ich auf folgende Zeile gestoßen
SBUF0 = 0xFF & *p >> 8; // put character
kann mir jemand erklären was der da macht? so richtig versteh ich das nicht.
Irgendwie ließt er was ein und verschiebt es gleichzeitig. die 0xFF ist als standartwert 0 ???
... aber was genau macht das & ???
Ne Vermutung hätt ich. Aber da wär interessant, was *p (bzw. p) fürn Datentyp ist, und ob SBUF0 8 oder 16 Bit hat.
Vermutung: *p wird 8 Bit nach rechts verschoben. Vom Resultat werden dann die 8 untersten Bits (Maske 0xFF = 0b11111111) SBUF0 zugewiesen...
Der holt sich Daten von Adresse p (pointer), verschiebt sie um 8 bit nach unten, maskiert die untersten 8 bit und schreibt das Ergebnis nach SBUF0. Das & ist ein bitweises UND. Das lässt nur die gesetzten Bits durch. Alle anderen werden auf Null gesetzt. Für den Fall, dass SBUF0 ein 8-bit-Register ist, wäre die Verundung mit 0xFF nicht notwendig, da das dann automatisch geschieht...
SBUF= hat 8 Bit.
"bitweises UND" bedeutet das, das er im Prinzip ein bit nach dem anderen kopiert?
was bedeutet hier "maskiert" ?
"bitweise" heisst, dass es keine Überträge auf andere Bits gibt (im Unterschied zu addieren)
MACHEN tut er die 8 Bit schon auf einmal.
"maskieren" heisst, nur die bits durchlassen, die in der "Maske" auf 1 sind
Wobei es egal ist, welches Byte die Daten und welches die Maske ist.
( A & B = B & A)
ah... hinter dem *p ist ja eigentlich ein int wert, z.b 3.
die ist aber eigentlich abgespeichert als 0000011.
durch das & wird die 0000011 jetzt bitweise in das SBUF0 geschrieben?!?
ist das richtig???
Folgendes: Angenommen der Wert in *p wäre 0110110111001100.
Wenn du jetzt *p & 0xFF machst, dann werden die rechten 8 Bit unverändert gelassen, und der Rest auf 0 gesetzt.
die "Maske" ist 0000000011111111.
Untereinander geschrieben:
0110110111001100: Wert
0000000011111111: Maske
0000000011001100: Ergebnis (alle Werte, bei denen die Maske 1 ist, werden übernommen).
Durch das = wird das ganze dann zugewiesen.
Das ganze Byte wird nach SBUF0 geschrieben. Ich nehm mal an, daß SBUF0 das Buffer-Register für eine serielle Schnittstelle ist. Der Controller sorgt dafür, daß das Byte dann bitweise rausgejagt wird. Das & 0xFF schneidet die oberen Bits ab.
@PicNick: danke für die Übersetzung
Das ganze Byte wird nach SBUF0 geschrieben. Ich nehm mal an, daß SBUF0 das Buffer-Register für eine serielle Schnittstelle ist.
Ja, ist es. 8 bit
[/quote]
Das & 0xFF schneidet die oberen Bits ab.[/quote]
weil SBUF0 nur 8 bit groß ist?????????
muss ich das machen..... was passiert wenn ich das nicht mache???
Wie gesagt: wenn SBUF0 ein 8-Bit-Register ist, ist "& 0xFF" nicht notwendig, weil die oberen Bits bei der Zuweisung sowiso weggeschnitten werden.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.