"<<"(双尖括号)在 C/C++ 枚举中是什么意思?
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. */
};
它是一个左位移运算符。这意味着它将位向左移动指定的位数:
假设值为:
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)。
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 为什么 int 类型的枚举类值不能用作 int
- 在 C++ 中输出枚举类类型的向量元素