C - 枚举 - 定义

标签 c enums bit-shift

<分区>

我在 C 源代码中看到作者定义枚举如下

enum {
    BINDER_DEBUG_USER_ERROR             = 1U << 0,
    BINDER_DEBUG_FAILED_TRANSACTION     = 1U << 1,
    BINDER_DEBUG_DEAD_TRANSACTION       = 1U << 2,
    BINDER_DEBUG_OPEN_CLOSE             = 1U << 3,
};

这背后的逻辑原因是什么?

最佳答案

它的目的是枚举中的每个条目都有一位,因此您可以切换每个条目:

/* BINDER_DEBUG_USER_ERROR = 0b0000 */
enum foo {
    BINDER_DEBUG_USER_ERROR             = 1U << 0, // = 0b0001
    BINDER_DEBUG_FAILED_TRANSACTION     = 1U << 1, // = 0b0010
    BINDER_DEBUG_DEAD_TRANSACTION       = 1U << 2, // = 0b0100
    BINDER_DEBUG_OPEN_CLOSE             = 1U << 3, // = 0b1000
};

现在您可以通过执行逻辑位操作在变量中设置/取消设置这些标志中的几个。

例如,您可以通过执行逻辑OR 来设置FAILED_TRANSACTIONOPEN_CLOSE:

enum foo x = BINDER_DEBUG_DEAD_TRANSACTION | BINDER_DEBUG_OPEN_CLOSE;

关于C - 枚举 - 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23781204/

相关文章:

C/按 ctrl+c 多次引发信号?

c - pow 函数的奇怪行为

C 如何滚动字节

c++ - 位移位和赋值

c - 理解太小类型的移位操作

C snprintf sprintf 检测到堆栈粉碎

python-3.x - Python pandas 按枚举类值对数据帧进行排序

java - 简单整数枚举

javascript - Typescript 中是否可以嵌套枚举?

c - 将函数返回的数组分配给二维数组的一行 C 编程