什么(1U<< X)做什么?

时间:2010-01-24 19:35:36

标签: c++

我找到了这段代码:

enum 
{
  IsDynamic = (1U << 0),  // ...
  IsSharable = (1U << 1), // ...
  IsStrong = (1U << 2)    // ...
};

(1U << X)做了什么?

5 个答案:

答案 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) { ... }