【问题标题】:Objective - C - Usage of << in enumerationObjective - C - << 在枚举中的用法
【发布时间】:2013-02-18 12:08:19
【问题描述】:

我可以在 Apple 的文档中看到枚举有时是这样定义的

enum {
UICollectionViewScrollPositionTop = 1 << 0,
UICollectionViewScrollPositionBottom = 1 << 1
}

【问题讨论】:

  • 虽然每个人都解释了它在技术上是什么以及它的作用,但我将尝试对其进行解释。以4 bits 为例,它的位值可以在00001111 之间。您可以将其视为开关,它们是on (1)off (0)。要切换第三个开关(从右到左),您必须将1shift 向左移两步。请记住,每个"flag" 应该(在大多数情况下)只切换一个开关,所以1&lt;&lt;1 == 1, 1&lt;&lt;2 == 2, 1&lt;&lt;3 == 4,所以不要在其中放置MyVar = 3 之类的标志,因为30011 位明智,切换两个开关.

标签: objective-c c typedef enumeration


【解决方案1】:

这是bitwise shift left 运算符。它用于创建具有单个位集的值,在打算通过按位 OR 组合时非常常见。

对于这些值,您以后可能会说:

const int top_and_bottom = UICollectionViewScrollPositionTop | UICollectionViewScrollPositionBottom;

这将导致 top_and_bottom 设置为 3(二进制 112)。

【讨论】:

    【解决方案2】:

    这里只是左位移位。所以这意味着 1&lt;&lt;0 = 1 例如。而1&lt;&lt;1 是两个。也许作者选择这种方式来初始化枚举是为了强调UICollectionViewScrollPositionTop只有最低有效位,UICollectionViewScrollPositionBottom只有倒数第二位。我猜这个枚举的用途是以后以某种方式形成位掩码。

    【讨论】:

    【解决方案3】:

    &lt;&lt; 代表左移。

    它将二进制转换为指定的位,因为4&lt;&lt;1 将是84&lt;&lt;2 将是16。 每左移一次,值就乘以 2。

    1

    查看here

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多