C - 枚举 - 定义

时间:2014-05-21 10:56:35

标签: 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,
};

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

2 个答案:

答案 0 :(得分:2)

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

/* 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
};

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

例如,您可以通过执行逻辑FAILED_TRANSACTION来设置OPEN_CLOSEOR

enum foo x = BINDER_DEBUG_DEAD_TRANSACTION | BINDER_DEBUG_OPEN_CLOSE;

答案 1 :(得分:2)

它可以更容易地看到设置为&#34; 1&#34;但是你可以通过分配一个对应于你要设置为&#34; 1&#34;的位的十进制值来获得相同的结果。 要回答你的问题,有一个原因,也就是它的可读性。