Hallo! Bin gerade dabei mir C anzueignen.. ;) Hab da mal eine Frage zur Bitoperation. z.B. folgender Code: x = PINA & (1<<PINA0) Dann wird doch der Zustand vom Pin PA0 in die Variable (als char definiert) x übernommen, wobei Bit 1 bis 7 von x fest 0 sind. Richtig? Was aber bedeutet "1<<abc" genau? Hat das was mit der Bitoperation "Linksschieben" zu tun? Wenn ja, was bedeutet die Eins? :-) Hab schon gesucht, aber nichs genaues gefunden... (..oder mit falschen Stichwörtern gesucht..) Danke!
In ASM schiebst du damit eine 1 um abc Stellen nach links. Das dürfte in C genauso sein. ...
Der Befehl "maskiert" sozusagen PINA0 aus. D.h. in x steht nachher nur noch der Wert von PINA0 drin, die restlichen Bits sind low, wie du ja schon festgestellt hast.
> Was aber bedeutet "1<<abc" genau? > > Hat das was mit der Bitoperation "Linksschieben" zu tun? Ja. > Wenn ja, was bedeutet die Eins? :-) Die ist das, was geschoben wird. Un wieviele Bits es geschoben werden soll, steht rechts.
Könnte man anstatt der Eins auch was anderes schreiben? Zum Bleistift 0? Oder 10? Oder muß da immer eine 1 stehen? Was passiert, wenn ich die 1 um 8 Stellen verrutsche? Eigendlich nichts, oder? (hat dann das verschieben um 9 Stellen den gl. Effekt wie um 1 Stelle?)
Moin Techniker, im Befehl 1<<abc steht links der Wert der manipuliert wird, in der Mitte die Operation, die durchgeführt wird und links der Operand. Kleines Beispiel: 1<<4: vorher: b00000001 Die Operation: b00000001 << 4 führt zu: b00010000 (16 dezimal) Eine Null zu shiften, macht demnach wenig Sinn, da das Resultat höchstwahrscheinlich wieder Null ist. Alles Klar? Gruß Bob
steht links der Wert der manipuliert wird, in_ _der Mitte die Operation, die durchgeführt wird und links der Operand. Und was steht rechts ? _*FG*_
rechts steht eine Zahl. Manchmal in Form eines Makro. Man kann übrigens auch nach rechts shiften (mit >>). Das ist besonders bei Wandlung von 16Bit-Werten in 2 8Bit-Werte interessant. Siehe auch UBRRL...
@Buchstabenverwurschtler Nach links und Mitte bleibt ja nur noch rechts übrig; simpler Schreibfehler
> Könnte man anstatt der Eins auch was anderes schreiben? Du kannst schieben, was du willst. Es sollte halt nur etwas für die Situation Sinnvolles sein :) > Zum Bleistift 0? Wenn du eine 0 verschiebst, kommt wieder nur 0 raus. > Oder 10? Ja. > Oder muß da immer eine 1 stehen? Im konkreten Fall muß es eine 1 sein, sonst ist das Ergebnis ja anders. > Was passiert, wenn ich die 1 um 8 Stellen verrutsche? Ich vermußte mal, du beziehst dich auf einen 8-bit-Typen. Das Literal 1 hat nämlich den Typ int. Üblicherweise kommt eine 0 raus, aber laut C-Norm führt ein Verschieben um die Bitbreite des Typs auf der linken Seite oder mehr zu undefiniertem Verhalten, muß also vermieden werden. > Eigendlich nichts, oder? Doch, denn eine 1, die beim Schieben "rausfällt", ist schlicht weg. Die kommt nicht wieder von der anderen Seite rein. Weiterhin ist das Verhalten laut C-Norm undefiniert > (hat dann das verschieben um 9 Stellen den gl. Effekt wie > um 1 Stelle?) s.o.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.