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

时间:2018-03-24 07:49:10

标签: c enums bit-shift

我是C的新手并想知道,按位移1<<枚举定义中的9在下面的例子中是这样做的:

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

该代码定义了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];