### 在C/ c++ enum中，" < "(雙尖括號)是什么意思?

#### [英]What does “<<” (double angle brackets) mean in C/C++ enum?

``````enum ofp10_port_state {

OFPPS10_STP_LISTEN  = 0 << 8, /* Not learning or relaying frames. */
OFPPS10_STP_LEARN   = 1 << 8, /* Learning but not relaying frames. */
OFPPS10_STP_FORWARD = 2 << 8, /* Learning and relaying frames. */
OFPPS10_STP_BLOCK   = 3 << 8, /* Not part of spanning tree. */
OFPPS10_STP_MASK    = 3 << 8  /* Bit mask for OFPPS10_STP_* values. */

};
``````

## 2 个解决方案

### #1

9

Its a left bit shift operator. Meaning it shifts the bits left the indicated number of bits:

say that the value is:

``````0x0F or 00001111
0x0F << 4 = 0xF0 or 11110000
``````

In microsoft c++ shifts right (>>) keep the sign (or the most significant digit, the one on the far left) depending on if the number is signed or unsigned

(assuming size of a byte):

(假設字節大小):

``````signed integer (an int for example):
0x80 or 10000000
0x80 >> 7 = 11111111
0x10 or 00010000
0x10 >> 4 = 00000001
if its unsigned (a uint):
0x80 or 10000000
0x80 >> 7 = 00000001
0x10 or 00010000
0x10 >> 4 = 00000001
``````

### #2

5

`<<` is a left bitshift operator.

<是一個左位移操作符。< p>

If you have a bit pattern like `0010` (2 in decimal) and shift it to the left by 2 like so `0010<<2`, you get `1000` (8 in decimal).

An enum is simply an integer that is large enough to hold at least an `int`. Thus we can directly assign `int` values like 0, 1, etc. to it.

enum只是一個大到足以容納一個int的整數，因此我們可以直接指定int值，比如0、1等等。

In this case, we are assigning things like `1 << 8` to it (which yields `100000000` or 256 in decimal).