22 Stimmen

C++: Was bedeutet (a<<b)?

Ich habe eine C++ Header-Datei, die die folgenden Definitionen enthält:

#define CACHE_NUM_WAYS    (1<<1)
#define CACHE_DATA_SIZE   (1<<8)

Es wird als Ganzzahl im restlichen Code verwendet.

Was bedeutet das? Und was ist sein Wert?

44voto

John Humphreys Punkte 35064

1 << 1 bedeutet:

00000000 00000001 ändert sich zu 00000000 00000010

1 << 8 bedeutet:

00000000 00000001 ändert sich zu 00000001 00000000

Es handelt sich um eine Bitverschiebungsoperation. Für jede 1 auf der rechten Seite können Sie sich vorstellen, dass Sie den Wert auf der linken Seite mit 2 multiplizieren. Also, 2 << 1 = 4 und 2 << 2 = 8. Dies ist viel effizienter als 1 * 2.

Außerdem können Sie 4 >> 1 = 2 (und 5 >> 1 = 2, da Sie abrunden) als die umgekehrte Operation durchführen.

9voto

moonshadow Punkte 81155

a< für Ganzzahlen bedeutet "nach links verschieben". Die bitweise Darstellung von `a` wird um `b` Bits nach links verschoben. Das entspricht demselben wie Multiplizieren mit (2 hoch `b`).

``

Also in deinem Beispiel ist (1<<1) 1*(2^1) ist 2, (1<<8) ist 1*(2^8) ist 256.

Es ist erwähnenswert, dass im Allgemeinen, wie bei anderen Operatoren in c++, << überschrieben werden kann, um andere Funktionen auszuführen. Standardmäßig überschreiben Ein- und Ausgabeströme diesen Operator, um Ihnen das Schreiben von prägnantem Code zum Senden einer Vielzahl von Parametern an den Strom zu ermöglichen. Daher können Sie Code wie diesen sehen:

cout << something << somethingelse

und << bedeutet in diesem Kontext nicht Linksshift.

``

6voto

jackdoe Punkte 1816

<< ist bitweises Verschieben nach links (es gibt auch >> bitweises Verschieben nach rechts) wenn Sie 32-Bit-Integer haben

1      = 00000000 00000000 00000000 00000001 = 1
1 << 1 = 00000000 00000000 00000000 00000010 = 2
1 << 8 = 00000000 00000000 00000001 00000000 = 256

5voto

Ran Punkte 4047

Dies sind Bitweise-Shift-Operatoren.

http://msdn.microsoft.com/de-de/library/336xbhcz(v=vs.80).aspx

<< verschiebt nach links, so dass es tatsächlich multipliziert mit 2 für << 1 und mit 2^8 für << 8.

3voto

Nawaz Punkte 339767

Der Operator << ist ein bitweiser Linksverschiebungsoperator.

Also, wenn Sie 1<<17 schreiben, wird die binäre Darstellung von 1 um 17 Bits nach links verschoben, wie folgt:

//vorher (nehmen Sie an, dass 1 durch 32-Bit dargestellt wird)
1 << 17  
0000 0000 0000 0000 0000 0000 0000 0001 << 17 (vorher - binäre Darstellung)

//nachher
0000 0000 0000 0010 0000 0000 0000 0000       (nachher - binäre Darstellung)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X