Warum wurde meine Variable nicht geändert, nachdem ein Bit-Shift-Operator darauf angewendet wurde?

7
%Vor%

Ich habe erwartet, 6 zu bekommen, weil ich ein Bit nach links geschoben habe. Warum funktioniert es nicht?

    
erandros 16.06.2011, 05:14
quelle

7 Antworten

19

Weil die Bit-Shift-Operatoren einen Wert zurückgeben.

Du willst das:

%Vor%

Die Schichtoperatoren verschieben nicht "an Ort und Stelle". Sie könnten an die andere Version denken. Wenn sie es taten, wie viele andere C ++ - Binäroperatoren, hätten wir sehr schlimme Dinge passieren.

%Vor%     
Mike Bailey 16.06.2011, 05:16
quelle
10

Sie sollten <<= verwenden oder der Wert ist einfach verloren.

    
Jack 16.06.2011 05:16
quelle
4

Sie müssen i dem verschobenen Wert zuweisen.

%Vor%

Alternativ können Sie & lt; & lt; = als Zuweisungsoperator verwenden:

%Vor%     
foxy 16.06.2011 05:17
quelle
3

Weil Sie die Antwort nicht i zugewiesen haben.

%Vor%     
Justin Aquadro 16.06.2011 05:16
quelle
3

Sie geben den Wert des Ausdrucks (i << 1); nicht auf i zurück.

Versuchen Sie:

%Vor%

Oder (gleich):

%Vor%     
Assaf Lavie 16.06.2011 05:17
quelle
2

Sie müssen den Wert wieder zu i mit i<<=1 zuweisen (mit "linker Shift und Operator zuweisen")

    
jonsca 16.06.2011 05:15
quelle
2

Grund: i << 1 erzeugt einen Zwischenwert, der nicht in der Variablen i gespeichert wird.

%Vor%

Für Ihre Absicht können Sie Folgendes verwenden:

%Vor%     
Eric Z 16.06.2011 05:21
quelle

Tags und Links