【问题标题】:what does it mean by type = 1 << 0? [duplicate]type = 1 << 0 是什么意思? [复制]
【发布时间】:2013-06-07 07:55:01
【问题描述】:

每个人。最近在学习OC的时候,总是遇到这样的enum。

enum {
    type1  = 0,
    type2  = 1 << 0,
    type3  = 1 << 1,
};

type = 1

【问题讨论】:

  • 是左移位运算符。 1 &lt;&lt; 0 实际上等于 1,但枚举作者只是想更清楚地说明它在同一组后面的枚举中 type3 type4 等。
  • 包含 0 真的很奇怪和不寻常,因为您不能将 type1 视为其他人之一。
  • 谢谢大家。我明白了。
  • 像这样为枚举赋值实际上是一种表示标志的好方法。例如,您可以检查枚举变量的值,并通过与 (type2 | type3) 进行位与来确定它是否既是 type2 又是 type3,(var &amp; (type2 | type3)) == (type2 | type3) 表示它既是 type2 又是 type3。只是说。 :)
  • 得到了另一个提示。很高兴! @n3rd4n1

标签: objective-c c


【解决方案1】:

按位左移运算符

在 Objective-C 中,按位左移运算符由 '

Source

另请阅读 this famous post 以了解它的作用和方式

【讨论】:

  • 这真是一个很棒的帖子!我只想要一滴水,你却送我一整个春天。我会仔细阅读并再次感谢。 :)
【解决方案2】:

1 << 0 = 1
1 << 1 = 2
1 << 2 = 4

【讨论】:

    【解决方案3】:

    此运算符是按位移位(不仅在 Objective-c 中)。

    您可以为枚举中的每个条目分配一个整数值,因此它与

    enum {
        type1  = 0,
        type2  = 1,
        type3  = 2
    };
    

    您可以使用移位运算符轻松确保您的枚举条目可以按位添加

    int bitmask = type2 | type3 //bitmask = 3
    

    【讨论】:

      【解决方案4】:

      这是一位移位。如果您需要为某物分配多种类型,则可以使用这种结构。它被称为位掩码。示例:

      enum {
          type1  = 1,
          type2  = 1 << 1,
          type3  = 1 << 2,
      };
      

      表示type1是二进制00000001,type2是00000010,type3是00000100等等。所以,如果类型掩码是 3 (00000011),你就知道你的对象是 type1 和 type2。

      【讨论】:

        【解决方案5】:

        这个偏移量为零位,即他的缺席。 只是为了统一。

        【讨论】:

          猜你喜欢
          • 2018-09-25
          • 2015-05-27
          • 1970-01-01
          • 2015-10-23
          • 1970-01-01
          • 2011-11-19
          • 2011-08-23
          • 1970-01-01
          • 2013-07-27
          相关资源
          最近更新 更多