什么是 1 << 0?

新手上路,请多包涵
 enum
    {
      kFlag_FPS         = 1 << 0,
      kFlag_Help        = 1 << 1,
      kFlag_RedBlue3D   = 1 << 2,
    }

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

 1 << 0

方法?

任何帮助是极大的赞赏!

原文由 CodeDoctorJL 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

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

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

这意味着用户正在获取 1 的位值,并根据正确的数字将位向左移动。

这意味着在这种情况下,它们的值在二进制中看起来像这样。

 1 << 0 = `0000 0001`
1 << 1 = `0000 0010`
1 << 2 = `0000 0100`

第一个班次不是必需的,但它看起来与其他班次更一致。

原文由 Caesar 发布,翻译遵循 CC BY-SA 3.0 许可协议

我自己正在寻找这个问题的答案,但我对原因更加好奇。这是一个正确解释原因的 链接。为什么不直接使用以整数为值的标准枚举呢?显然,对枚举使用位运算符非常适合定义标志。

 // Powers of two
[Flags] public enum AttackType {
    // Decimal     // Binary
    None   = 0,    // 000000
    Melee  = 1,    // 000001
    Fire   = 2,    // 000010
    Ice    = 4,    // 000100
    Poison = 8     // 001000
}
// Label          Binary   Decimal
// Melee:         000001 = 1
// Fire:          000010 = 2
// Melee | Fire:  000011 = 3

使用上述内容,您可以组合多个标志/枚举并具有唯一值,而无需在实际枚举类中定义它。使用此 链接 了解更多信息。

原文由 Grace Em 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题