代码之家  ›  专栏  ›  技术社区  ›  Jakey

C枚举定义中的按位移位有什么作用?

  •  1
  • Jakey  · 技术社区  · 6 年前

    我是C新手,想知道按位移位1是什么<<9在枚举定义中,请执行以下操作:

    static enum {
        DEAD, LIVE
    } state[1 << 9];
    
    2 回复  |  直到 6 年前
        1
  •  6
  •   Paul Ogilvie    6 年前

    表达式 1<<9 与2相同 9 ,即512。

    因此声明了512个枚举的数组。

        2
  •  4
  •   chqrlie    6 年前

    代码定义了 static 未命名的值数组 enum 具有2个值 DEAD (0)或 LIVE (1) 。此数组的元素数指定为 1 << 9 (512)。

    将这些作为

    enum status { DEAD, LIVE };
    static enum status state[1 << 9];
    

    还要注意,此枚举类型的大小是特定于实现的。如果紧凑性是一个问题,那么应该使用 unsigned char ,或使用按位表示,但您需要手动编写代码,因为C语言没有对位数组的内置支持:

    enum { DEAD = 0, LIVE = 1 };
    static unsigned char state[1 << 9];