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

What does a bitwise shift in a C enum definition do?

我是 C 的新手,想知道枚举定义中的位移位 1 << 9 在下面的这种情况下有什么作用:

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

表达式1<<9与29相同,即512.

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

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

将它们分开会更易读

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

另请注意,此枚举类型的大小是特定于实现的。如果紧凑性是一个问题,您应该使用 unsigned char 数组,或使用按位表示,但您需要手动编码,因为 C 语言不支持 built-in 位数组:

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