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. */

};

Answers


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

<< is a left bitshift operator.

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.

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


Need Your Help

Title pages of book in docbook 5.0

docbook

I am looking into structuring book (fiction) in docbook 5.0. I have got several introductory pages like about the book, about the author, about the publisher (with copyright, isbn info about the pr...

User controls do not properly fit on the screen

c# winforms user-controls dock

My application has several controls. Like in one screen has TreeView on left side, GridView with paging in the middle and 4 buttons at right side. The controls properly appear when the form is in a