"<<"(双尖括号)在 C/C++ 枚举中是什么意思?

What does "<<" (double angle brackets) mean in C/C++ enum?

本文关键字:lt 枚举 C++ 意思 是什么      更新时间:2023-10-16
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. */
};

它是一个左位移运算符。这意味着它将位向左移动指定的位数:

假设值为:

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

<<是一个左位移运算符。

如果你有一个像 0010 这样的位模式(十进制为 2),并将其向左移动 2 0010<<2,你会得到1000(十进制为 8)。

枚举只是一个整数,它足够大,至少可以容纳一个int。因此,我们可以直接为其分配 0、1 等int值。

在这种情况下,我们将1 << 8之类的东西分配给它(产生十进制的 100000000 或 256)。