Bitverschiebung *UND* Zuweisung(??)

OP #989207
Ich habe mal eine grundsätzliche Frage, zur Schreibweise einer 
Bitverschiebung. Wenn ich
1
    wert = 0b0001;

habe, und in C schreibe
1
    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:
1
    wert <<= 1;   //(II.)

Wenn ich zuvor 0b0001 hatte, was steht jetzt in wert??? Es ist ja so, 
dass das die Kurzschreibweise für
1
    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??
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.
OP
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/CONCEPT/bit_shift.html#shift) 
gefunden. Ich schätze, der sagt wohl was Falsches aus!?

Nochmal danke!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.