我在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,
};
这背后的逻辑原因是什么?
答案 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_CLOSE
和OR
:
enum foo x = BINDER_DEBUG_DEAD_TRANSACTION | BINDER_DEBUG_OPEN_CLOSE;
答案 1 :(得分:2)
它可以更容易地看到设置为&#34; 1&#34;但是你可以通过分配一个对应于你要设置为&#34; 1&#34;的位的十进制值来获得相同的结果。 要回答你的问题,有一个原因,也就是它的可读性。