2012-06-15 59 views
3
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

這是左位移運算符。這應該給一個提示。 – chris

+4

這是一個位移操作符。與枚舉無關。 – 2012-06-15 17:55:29

+0

這必須是一個重複的...和一般的參考... – NominSim

回答

5

<<是一個左移位運算符。

如果你有一個像0010(十進制2)的位模式並且像這樣0010<<2這樣左移2,你會得到1000(十進制8)。

枚舉只是一個大到足以容納至少一個int的整數。因此,我們可以直接將int的值分配給0,1等。

在這種情況下,我們正在爲其分配1 << 8之類的東西(產生100000000或256位十進制)。

9

它是一個左移位運算符。這意味着它變爲位左邊顯示位數:

說值是:

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

用Microsoft C++右移(>>)保持符號(或最顯著數字,一個上取決於如果數帶有符號

(假設一個字節的大小)最左側):

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