Frage zur C-Syntax

Gast #254613
Lesenswert?

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!
Gast #254616
Lesenswert?

> 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.
Gast #254617
Lesenswert?

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?)
Gast #254618
Lesenswert?

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
Gast #254622
Lesenswert?

> 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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren