什么是1 << 0?

Cod*_*rJL 31 c++ syntax bit-manipulation

 enum
    {
      kFlag_FPS         = 1 << 0,
      kFlag_Help        = 1 << 1,
      kFlag_RedBlue3D   = 1 << 2,
    }
Run Code Online (Sandbox Code Playgroud)

我试图了解这段代码是什么我不太清楚:

1 << 0
Run Code Online (Sandbox Code Playgroud)

手段?

任何帮助是极大的赞赏!

Cae*_*sar 35

MSDN - 移位运算符:>>和<<

左移运算符使第一个操作数中的位模式向左移动第二个操作数指定的位数.通过换档操作腾出的位是零填充的.这是逻辑移位而不是移位和旋转操作.

这意味着用户正在获取比特值1并基于正确的数字将比特向左移位.

这意味着在这种情况下,它们的值将以二进制形式显示.

1 << 0 = `0000 0001`
1 << 1 = `0000 0010`
1 << 2 = `0000 0100`
Run Code Online (Sandbox Code Playgroud)

第一次转变不是必要的,但看起来与其他转变更为一致.

  • 您应该避免将“MSDN”作为 C++ 语言参考的可靠来源 恕我直言 (4认同)
  • @g-makulik:我倾向于同意,但这个特定的 MSDN 文档似乎是准确的。 (3认同)

1''*_*1'' 7

1 << 0 是1向左移动了0个位置,这只是1.


Ted*_*opp 5

本来可以很简单

enum
    {
      kFlag_FPS         = 1,
      kFlag_Help        = 1 << 1,
      kFlag_RedBlue3D   = 1 << 2,
    }
Run Code Online (Sandbox Code Playgroud)

但编码员喜欢更多的对称性。


sed*_*idw 5

<<操作是移位器。因此1 << 2,等于4您乘位1并移位2。使用时1 << 0,对值没有影响,并且可能使所有内容看起来一致


小智 5

x << y-表示将x的位左移(取较大的值)y次。在数学上,这看起来像: x * (2^y)x * pow(2, y)