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. */
};
问问题
10119 次
2 回答
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
于 2012-06-15T17:57:58.957 回答
6
<<
是左移位运算符。
如果你有一个像0010
(2 in decimal) 这样的位模式并将它向左移动 2 0010<<2
,你会得到1000
(8 in decimal)。
枚举只是一个整数,它大到足以容纳至少一个int
. 因此,我们可以直接为其分配int
0、1 等值。
在这种情况下,我们将类似的东西分配1 << 8
给它(产生100000000
或十进制的 256)。
于 2012-06-15T17:57:10.320 回答