www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bitverschiebung *UND* Zuweisung(??)


Autor: Tio T. (misterten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal eine grundsätzliche Frage, zur Schreibweise einer 
Bitverschiebung. Wenn ich
    wert = 0b0001;

habe, und in C schreibe
    wert << 1;    //(I.)

dann bekomme ich wert = 0b0010. Nennt sich Bitverschiebung. Klar soweit. 
Jetzt gibt es aber die Verschiebung UND Zuweisung, die folgendermaßen 
aussieht:
    wert <<= 1;   //(II.)

Wenn ich zuvor 0b0001 hatte, was steht jetzt in wert??? Es ist ja so, 
dass das die Kurzschreibweise für
    wert = wert << 1;    //(III.) = (II.)  [ != (I.) ???]

ist. Ich sehe da nun eigentlich nur eine doppelt gemoppelte Asuführung 
von (I.): die Bits werden um eine Stelle verschoben, und das Ergebnis 
des Werts wird nocheinmal in die selbe Variable geschrieben, wobei ich 
keine weitere Verschiebung vornehme. Wenn ich aber (II.) anwende, ist 
das Ergebnis ein anderes als (I.). Wie wird hier noch was verschoben?

Ich habe schon viele Grundlagen und Skripte durchsucht, und bisher habe 
ich nicht sehen können, dass es eine Unterscheidung gibt. Bzw. sprechen 
die einen von "<< 1 ist Verschiebung um eins nach links" und die anderen 
"<<= 1 ist Verschiebung um eins nach links", was zwar keinen Unterschied 
impliziert, aber offensichtlich doch nicht stimmt. Wo liegt des Pudels 
Kern??

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wert << 1;
Liefert nur das Ergebniss der Operation zurück "wert" wird dabei nicht 
verändert.Da du keine Zuweisung hast wird das ganze somit verworfen.


wert <<= 1;
Verschiebt das ganze direkt IN "wert".

wert = wert << 1;
Ist effektiv was selbe wie "wert <<= 1". Wird normal vom Compiler auch 
gleich gehandhabt, ausser vlt. bei volatile variablen.

Autor: Tio T. (misterten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh,...

hallo Nico, danke für die schnelle Antwort. Ich bin jetzt ein wenig 
verwundert. Dass (I.) das Ergebnis sozusagen wieder verwift, leuchtet 
ein. Ich meinte aber mal (I.) mehrmals funktionierend angewandt zu 
haben, deswegen bin und war ich verwundert. Gut, ich werde ab sofort nur 
noch <<= oder >>= anwenden, dann kann es nicht zu Schwierigkeiten 
kommen.

Habe übrigens grad diesen Link hier 
(http://www.itee.uq.edu.au/~comp2303/Leslie_C_ref/C...) 
gefunden. Ich schätze, der sagt wohl was Falsches aus!?

Nochmal danke!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich meinte aber mal (I.) mehrmals funktionierend
> angewandt zu haben

Dann nur so:
wert = wert << 1;
Und die Kurzschreibweise davon ist halt
wert <<= 1;

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tio T. wrote:

> Habe übrigens grad diesen Link hier
> 
(http://www.itee.uq.edu.au/~comp2303/Leslie_C_ref/C...)
> gefunden. Ich schätze, der sagt wohl was Falsches aus!?

Wieso? Ich kann da jetzt keinen fehler sehen. Es wird halt zweimal um 
jeweils zwei Positionen verschoben. Einmal in der langen und einmal in 
der kurzen Schreibweise.

Autor: Tio T. (misterten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, ich hatte die letzte Zeile nicht als erneuten Operationsaufruf 
verstanden. Dann ist jetzt alles klar. :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.