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