位运算

1

位标志和位域

3 分钟

C 里位标志很常见:

#define FLAG_READ   (1u << 0)
#define FLAG_WRITE  (1u << 1)
#define FLAG_ERROR  (1u << 2)

uint32_t flags = FLAG_READ | FLAG_WRITE;

if (flags & FLAG_ERROR) {
    handle_error();
}

Rust 当然也能做位运算。但有两个习惯要先改:

C:    if (flags & FLAG_ERROR)
Rust: if flags & FLAG_ERROR != 0

Rust 的 if 条件必须是 bool。整数不会自动当作真假值。

阅读更多