我找到了这段代码:
enum
{
IsDynamic = (1U << 0), // ...
IsSharable = (1U << 1), // ...
IsStrong = (1U << 2) // ...
};
(1U << X)
做了什么?
答案 0 :(得分:36)
设置位掩码:
1U << 0 = 1
1U << 1 = 2
1U << 2 = 4
etc...
1U(无符号值1)向左移位x位。
您发布的代码相当于:
enum
{
IsDynamic = 1U, // binary: 00000000000000000000000000000001
IsSharable = 2U, // binary: 00000000000000000000000000000010
IsStrong = 4U // binary: 00000000000000000000000000000100
}
答案 1 :(得分:5)
位移。而不是说a = 1,b = 2,c = 4,它们移位。 我们的想法是将许多标志打包成一个整数(或长整数)。
这实际上是一种非常干净的方法。
答案 2 :(得分:2)
&LT;&LT;是bitshift运算符。它将取左侧的位并将它们移动右侧指定的量。例如:
1 << 1 -> 0b0001 << 1 => 0b0010
1 << 2 -> 0b0001 << 2 => 0b0100
等
答案 3 :(得分:0)
1U
是无符号值,单个位0置位,所有其他位清零。 <<
运算符表示“向左移位”。 1U << 0
表示创建一个位为0的值; 1U << 1
表示创建第1位的值;等
答案 4 :(得分:0)
该片段
enum
{
IsDynamic = (1U << 0), // ...
IsSharable = (1U << 1), // ...
IsStrong = (1U << 2) // ...
}
声明一个枚举,其值为2的幂。可能被用作包含多个标志的值的掩码。
例如,表示IsDynamic和IsSharable的值的值是
unsigned value = IsDynamic | IsSharable; // could use + as well
并测试值IsStrong
if (value & IsStrong) { ... }