我在 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_TRANSACTION
和OPEN_CLOSE
:
enum foo x = BINDER_DEBUG_DEAD_TRANSACTION | BINDER_DEBUG_OPEN_CLOSE;